writer/spriv: Cast level parameter to f32 for depth texture sampling

SPIR-V expects a f32, while WGSL has an i32 type for these.

Bug: tint:143
Change-Id: I8e724f24f12154f57cddfd01dfd727e440ca8450
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/37449
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: David Neto <dneto@google.com>
This commit is contained in:
Ben Clayton 2021-01-12 21:42:28 +00:00 committed by Commit Bot service account
parent 9a9aa58ddd
commit 72114bd61b
2 changed files with 42 additions and 23 deletions

View File

@ -2257,8 +2257,21 @@ bool Builder::GenerateTextureIntrinsic(ast::IdentifierExpression* ident,
return false; return false;
} }
assert(pidx.level != kNotUsed); assert(pidx.level != kNotUsed);
image_operands.emplace_back( auto level = Operand::Int(0);
ImageOperand{SpvImageOperandsLodMask, gen_param(pidx.level)}); if (call->params()[pidx.level]->result_type()->Is<ast::type::I32>()) {
// Depth textures have i32 parameters for the level, but SPIR-V expects
// F32. Cast.
auto* f32 = mod_->create<ast::type::F32>();
ast::TypeConstructorExpression cast(Source{}, f32,
{call->params()[pidx.level]});
level = Operand::Int(GenerateExpression(&cast));
if (level.to_i() == 0) {
return false;
}
} else {
level = gen_param(pidx.level);
}
image_operands.emplace_back(ImageOperand{SpvImageOperandsLodMask, level});
break; break;
} }
case ast::Intrinsic::kTextureSampleGrad: { case ast::Intrinsic::kTextureSampleGrad: {

View File

@ -1679,14 +1679,15 @@ OpCapability SampledCubeArray
%16 = OpConstant %4 1 %16 = OpConstant %4 1
%17 = OpConstant %4 2 %17 = OpConstant %4 2
%18 = OpConstantComposite %15 %16 %17 %18 = OpConstantComposite %15 %16 %17
%19 = OpTypeInt 32 1 %20 = OpTypeInt 32 1
%20 = OpConstant %19 3 %21 = OpConstant %20 3
)", )",
R"( R"(
%11 = OpLoad %7 %5 %11 = OpLoad %7 %5
%12 = OpLoad %3 %1 %12 = OpLoad %3 %1
%14 = OpSampledImage %13 %12 %11 %14 = OpSampledImage %13 %12 %11
%9 = OpImageSampleExplicitLod %10 %14 %18 Lod %20 %19 = OpConvertSToF %4 %21
%9 = OpImageSampleExplicitLod %10 %14 %18 Lod %19
%8 = OpCompositeExtract %4 %9 0 %8 = OpCompositeExtract %4 %9 0
)", )",
R"( R"(
@ -1707,18 +1708,19 @@ OpCapability SampledCubeArray
%16 = OpConstant %4 1 %16 = OpConstant %4 1
%17 = OpConstant %4 2 %17 = OpConstant %4 2
%18 = OpConstantComposite %15 %16 %17 %18 = OpConstantComposite %15 %16 %17
%19 = OpTypeInt 32 1 %20 = OpTypeInt 32 1
%20 = OpConstant %19 3 %21 = OpConstant %20 3
%21 = OpTypeVector %19 2 %22 = OpTypeVector %20 2
%22 = OpConstant %19 4 %23 = OpConstant %20 4
%23 = OpConstant %19 5 %24 = OpConstant %20 5
%24 = OpConstantComposite %21 %22 %23 %25 = OpConstantComposite %22 %23 %24
)", )",
R"( R"(
%11 = OpLoad %7 %5 %11 = OpLoad %7 %5
%12 = OpLoad %3 %1 %12 = OpLoad %3 %1
%14 = OpSampledImage %13 %12 %11 %14 = OpSampledImage %13 %12 %11
%9 = OpImageSampleExplicitLod %10 %14 %18 Lod|ConstOffset %20 %24 %19 = OpConvertSToF %4 %21
%9 = OpImageSampleExplicitLod %10 %14 %18 Lod|ConstOffset %19 %25
%8 = OpCompositeExtract %4 %9 0 %8 = OpCompositeExtract %4 %9 0
)", )",
R"( R"(
@ -1740,7 +1742,7 @@ OpCapability SampledCubeArray
%17 = OpConstant %4 2 %17 = OpConstant %4 2
%19 = OpTypeInt 32 1 %19 = OpTypeInt 32 1
%20 = OpConstant %19 3 %20 = OpConstant %19 3
%22 = OpConstant %19 4 %23 = OpConstant %19 4
)", )",
R"( R"(
%11 = OpLoad %7 %5 %11 = OpLoad %7 %5
@ -1748,6 +1750,7 @@ OpCapability SampledCubeArray
%14 = OpSampledImage %13 %12 %11 %14 = OpSampledImage %13 %12 %11
%18 = OpConvertSToF %4 %20 %18 = OpConvertSToF %4 %20
%21 = OpCompositeConstruct %15 %16 %17 %18 %21 = OpCompositeConstruct %15 %16 %17 %18
%22 = OpConvertSToF %4 %23
%9 = OpImageSampleExplicitLod %10 %14 %21 Lod %22 %9 = OpImageSampleExplicitLod %10 %14 %21 Lod %22
%8 = OpCompositeExtract %4 %9 0 %8 = OpCompositeExtract %4 %9 0
)", )",
@ -1770,11 +1773,11 @@ OpCapability SampledCubeArray
%17 = OpConstant %4 2 %17 = OpConstant %4 2
%19 = OpTypeInt 32 1 %19 = OpTypeInt 32 1
%20 = OpConstant %19 3 %20 = OpConstant %19 3
%22 = OpConstant %19 4 %23 = OpConstant %19 4
%23 = OpTypeVector %19 2 %24 = OpTypeVector %19 2
%24 = OpConstant %19 5 %25 = OpConstant %19 5
%25 = OpConstant %19 6 %26 = OpConstant %19 6
%26 = OpConstantComposite %23 %24 %25 %27 = OpConstantComposite %24 %25 %26
)", )",
R"( R"(
%11 = OpLoad %7 %5 %11 = OpLoad %7 %5
@ -1782,7 +1785,8 @@ OpCapability SampledCubeArray
%14 = OpSampledImage %13 %12 %11 %14 = OpSampledImage %13 %12 %11
%18 = OpConvertSToF %4 %20 %18 = OpConvertSToF %4 %20
%21 = OpCompositeConstruct %15 %16 %17 %18 %21 = OpCompositeConstruct %15 %16 %17 %18
%9 = OpImageSampleExplicitLod %10 %14 %21 Lod|ConstOffset %22 %26 %22 = OpConvertSToF %4 %23
%9 = OpImageSampleExplicitLod %10 %14 %21 Lod|ConstOffset %22 %27
%8 = OpCompositeExtract %4 %9 0 %8 = OpCompositeExtract %4 %9 0
)", )",
R"( R"(
@ -1804,14 +1808,15 @@ OpCapability SampledCubeArray
%17 = OpConstant %4 2 %17 = OpConstant %4 2
%18 = OpConstant %4 3 %18 = OpConstant %4 3
%19 = OpConstantComposite %15 %16 %17 %18 %19 = OpConstantComposite %15 %16 %17 %18
%20 = OpTypeInt 32 1 %21 = OpTypeInt 32 1
%21 = OpConstant %20 4 %22 = OpConstant %21 4
)", )",
R"( R"(
%11 = OpLoad %7 %5 %11 = OpLoad %7 %5
%12 = OpLoad %3 %1 %12 = OpLoad %3 %1
%14 = OpSampledImage %13 %12 %11 %14 = OpSampledImage %13 %12 %11
%9 = OpImageSampleExplicitLod %10 %14 %19 Lod %21 %20 = OpConvertSToF %4 %22
%9 = OpImageSampleExplicitLod %10 %14 %19 Lod %20
%8 = OpCompositeExtract %4 %9 0 %8 = OpCompositeExtract %4 %9 0
)", )",
R"( R"(
@ -1833,7 +1838,7 @@ OpCapability SampledCubeArray
%17 = OpConstant %4 3 %17 = OpConstant %4 3
%19 = OpTypeInt 32 1 %19 = OpTypeInt 32 1
%20 = OpConstant %19 4 %20 = OpConstant %19 4
%22 = OpConstant %19 5 %23 = OpConstant %19 5
)", )",
R"( R"(
%11 = OpLoad %7 %5 %11 = OpLoad %7 %5
@ -1841,6 +1846,7 @@ OpCapability SampledCubeArray
%14 = OpSampledImage %13 %12 %11 %14 = OpSampledImage %13 %12 %11
%18 = OpConvertSToF %4 %20 %18 = OpConvertSToF %4 %20
%21 = OpCompositeConstruct %10 %15 %16 %17 %18 %21 = OpCompositeConstruct %10 %15 %16 %17 %18
%22 = OpConvertSToF %4 %23
%9 = OpImageSampleExplicitLod %10 %14 %21 Lod %22 %9 = OpImageSampleExplicitLod %10 %14 %21 Lod %22
%8 = OpCompositeExtract %4 %9 0 %8 = OpCompositeExtract %4 %9 0
)", )",