writer/spirv: Use OpImageQuerySizeLod for non-MS images

Fixes validation error:
`Image must have either 'MS'=1 or 'Sampled'=0 or 'Sampled'=2`

Bug: tint:140
Bug: tint:437
Change-Id: If6d7e86aeb7767b212debf94bcae9ee2ce8ad209
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/37445
Reviewed-by: David Neto <dneto@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index a02d9f9..bd6fda7 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -2117,11 +2117,17 @@
       }
 
       spirv_params.emplace_back(gen_param(pidx.texture));
-      if (pidx.level != kNotUsed) {
+      if (texture_type->Is<ast::type::MultisampledTexture>() ||
+          texture_type->Is<ast::type::StorageTexture>()) {
+        op = spv::Op::OpImageQuerySize;
+      } else if (pidx.level != kNotUsed) {
         op = spv::Op::OpImageQuerySizeLod;
         spirv_params.emplace_back(gen_param(pidx.level));
       } else {
-        op = spv::Op::OpImageQuerySize;
+        ast::SintLiteral i32_0(Source{}, mod_->create<ast::type::I32>(), 0);
+        op = spv::Op::OpImageQuerySizeLod;
+        spirv_params.emplace_back(
+            Operand::Int(GenerateLiteralIfNeeded(nullptr, &i32_0)));
       }
       break;
     }
diff --git a/src/writer/spirv/builder_intrinsic_texture_test.cc b/src/writer/spirv/builder_intrinsic_texture_test.cc
index a8533ec..760af94 100644
--- a/src/writer/spirv/builder_intrinsic_texture_test.cc
+++ b/src/writer/spirv/builder_intrinsic_texture_test.cc
@@ -51,10 +51,11 @@
 %6 = OpTypePointer UniformConstant %7
 %5 = OpVariable %6 UniformConstant
 %9 = OpTypeInt 32 1
+%11 = OpConstant %9 0
 )",
           R"(
 %10 = OpLoad %3 %1
-%8 = OpImageQuerySize %9 %10
+%8 = OpImageQuerySizeLod %9 %10 %11
 )",
           R"(
 OpCapability Sampled1D
@@ -72,10 +73,11 @@
 %5 = OpVariable %6 UniformConstant
 %9 = OpTypeInt 32 1
 %11 = OpTypeVector %9 2
+%13 = OpConstant %9 0
 )",
           R"(
 %12 = OpLoad %3 %1
-%10 = OpImageQuerySize %11 %12
+%10 = OpImageQuerySizeLod %11 %12 %13
 %8 = OpCompositeExtract %9 %10 0
 )",
           R"(
@@ -94,10 +96,11 @@
 %5 = OpVariable %6 UniformConstant
 %10 = OpTypeInt 32 1
 %9 = OpTypeVector %10 2
+%12 = OpConstant %10 0
 )",
           R"(
 %11 = OpLoad %3 %1
-%8 = OpImageQuerySize %9 %11
+%8 = OpImageQuerySizeLod %9 %11 %12
 )",
           R"(
 OpCapability ImageQuery
@@ -136,10 +139,11 @@
 %10 = OpTypeInt 32 1
 %9 = OpTypeVector %10 2
 %12 = OpTypeVector %10 3
+%14 = OpConstant %10 0
 )",
           R"(
 %13 = OpLoad %3 %1
-%11 = OpImageQuerySize %12 %13
+%11 = OpImageQuerySizeLod %12 %13 %14
 %8 = OpVectorShuffle %9 %11 %11 0 1
 )",
           R"(
@@ -180,10 +184,11 @@
 %5 = OpVariable %6 UniformConstant
 %10 = OpTypeInt 32 1
 %9 = OpTypeVector %10 3
+%12 = OpConstant %10 0
 )",
           R"(
 %11 = OpLoad %3 %1
-%8 = OpImageQuerySize %9 %11
+%8 = OpImageQuerySizeLod %9 %11 %12
 )",
           R"(
 OpCapability ImageQuery
@@ -221,10 +226,11 @@
 %5 = OpVariable %6 UniformConstant
 %10 = OpTypeInt 32 1
 %9 = OpTypeVector %10 3
+%12 = OpConstant %10 0
 )",
           R"(
 %11 = OpLoad %3 %1
-%8 = OpImageQuerySize %9 %11
+%8 = OpImageQuerySizeLod %9 %11 %12
 )",
           R"(
 OpCapability ImageQuery
@@ -263,10 +269,11 @@
 %10 = OpTypeInt 32 1
 %9 = OpTypeVector %10 3
 %12 = OpTypeVector %10 4
+%14 = OpConstant %10 0
 )",
           R"(
 %13 = OpLoad %3 %1
-%11 = OpImageQuerySize %12 %13
+%11 = OpImageQuerySizeLod %12 %13 %14
 %8 = OpVectorShuffle %9 %11 %11 0 1 2
 )",
           R"(
@@ -351,10 +358,11 @@
 %5 = OpVariable %6 UniformConstant
 %10 = OpTypeInt 32 1
 %9 = OpTypeVector %10 2
+%12 = OpConstant %10 0
 )",
           R"(
 %11 = OpLoad %3 %1
-%8 = OpImageQuerySize %9 %11
+%8 = OpImageQuerySizeLod %9 %11 %12
 )",
           R"(
 OpCapability ImageQuery
@@ -393,10 +401,11 @@
 %10 = OpTypeInt 32 1
 %9 = OpTypeVector %10 2
 %12 = OpTypeVector %10 3
+%14 = OpConstant %10 0
 )",
           R"(
 %13 = OpLoad %3 %1
-%11 = OpImageQuerySize %12 %13
+%11 = OpImageQuerySizeLod %12 %13 %14
 %8 = OpVectorShuffle %9 %11 %11 0 1
 )",
           R"(
@@ -437,10 +446,11 @@
 %5 = OpVariable %6 UniformConstant
 %10 = OpTypeInt 32 1
 %9 = OpTypeVector %10 3
+%12 = OpConstant %10 0
 )",
           R"(
 %11 = OpLoad %3 %1
-%8 = OpImageQuerySize %9 %11
+%8 = OpImageQuerySizeLod %9 %11 %12
 )",
           R"(
 OpCapability ImageQuery
@@ -479,10 +489,11 @@
 %10 = OpTypeInt 32 1
 %9 = OpTypeVector %10 3
 %12 = OpTypeVector %10 4
+%14 = OpConstant %10 0
 )",
           R"(
 %13 = OpLoad %3 %1
-%11 = OpImageQuerySize %12 %13
+%11 = OpImageQuerySizeLod %12 %13 %14
 %8 = OpVectorShuffle %9 %11 %11 0 1 2
 )",
           R"(