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>
This commit is contained in:
Ben Clayton 2021-01-12 21:18:58 +00:00 committed by Commit Bot service account
parent d1aef67011
commit ecc2cdfb61
2 changed files with 30 additions and 13 deletions

View File

@ -2117,11 +2117,17 @@ bool Builder::GenerateTextureIntrinsic(ast::IdentifierExpression* ident,
}
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;
}

View File

@ -51,10 +51,11 @@ expected_texture_overload_spirv expected_texture_overload(
%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 @@ OpCapability ImageQuery
%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 @@ OpCapability ImageQuery
%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 @@ OpCapability ImageQuery
%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 @@ OpCapability ImageQuery
%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 @@ OpCapability ImageQuery
%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 @@ OpCapability ImageQuery
%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 @@ OpCapability ImageQuery
%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 @@ OpCapability ImageQuery
%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 @@ OpCapability ImageQuery
%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 @@ OpCapability ImageQuery
%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"(