writer/spirv: Use PackCoordAndArrayIndex()

As `PackCoordAndArrayIndex()` extracts the elements of vectors-in-vectors, the resulting SPIR-V is now more compact.

Change-Id: I3e35546efc89531b9f70d4c44c23c179e76b15d8
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/33781
Commit-Queue: Ben Clayton <bclayton@google.com>
Auto-Submit: Ben Clayton <bclayton@google.com>
Reviewed-by: David Neto <dneto@google.com>
This commit is contained in:
Ben Clayton 2020-11-26 14:18:12 +00:00 committed by Commit Bot service account
parent 41c8cd3e68
commit f48d244252
3 changed files with 239 additions and 342 deletions

View File

@ -756,8 +756,6 @@ bool GeneratorImpl::EmitTextureCall(std::ostream& pre,
out << ", "; out << ", ";
// TODO(ben-clayton): Refactor this with the near identical code in
// src/writer/spirv/builder.cc.
if (pidx.array_index != kNotUsed) { if (pidx.array_index != kNotUsed) {
// Array index needs to be appended to the coordinates. // Array index needs to be appended to the coordinates.
auto* param_coords = params[pidx.coords]; auto* param_coords = params[pidx.coords];

View File

@ -69,6 +69,7 @@
#include "src/ast/uint_literal.h" #include "src/ast/uint_literal.h"
#include "src/ast/unary_op_expression.h" #include "src/ast/unary_op_expression.h"
#include "src/ast/variable_decl_statement.h" #include "src/ast/variable_decl_statement.h"
#include "src/writer/pack_coord_arrayidx.h"
namespace tint { namespace tint {
namespace writer { namespace writer {
@ -1971,32 +1972,18 @@ void Builder::GenerateTextureIntrinsic(ast::IdentifierExpression* ident,
auto* param_coords = call->params()[pidx.coords]; auto* param_coords = call->params()[pidx.coords];
auto* param_array_index = call->params()[pidx.array_index]; auto* param_array_index = call->params()[pidx.array_index];
uint32_t packed_coords_size; if (!PackCoordAndArrayIndex(
ast::type::Type* packed_coords_el_ty; // Currenly must be f32. param_coords, param_array_index,
if (param_coords->result_type()->IsVector()) { [&](ast::TypeConstructorExpression* packed) {
auto* vec = param_coords->result_type()->AsVector(); auto param = GenerateTypeConstructorExpression(packed, false);
packed_coords_size = vec->size() + 1; if (param == 0) {
packed_coords_el_ty = vec->type(); return false;
} else { }
packed_coords_size = 2; spirv_params.emplace_back(Operand::Int(param));
packed_coords_el_ty = param_coords->result_type(); return true;
})) {
return;
} }
// Cast param_array_index to the vector element type
ast::TypeConstructorExpression array_index_cast(packed_coords_el_ty,
{param_array_index});
array_index_cast.set_result_type(packed_coords_el_ty);
ast::type::VectorType packed_coords_ty(packed_coords_el_ty,
packed_coords_size);
ast::TypeConstructorExpression constructor{
&packed_coords_ty, {param_coords, &array_index_cast}};
auto packed_coords =
GenerateTypeConstructorExpression(&constructor, false);
spirv_params.emplace_back(Operand::Int(packed_coords)); // coordinates
} else { } else {
spirv_params.emplace_back(gen_param(pidx.coords)); // coordinates spirv_params.emplace_back(gen_param(pidx.coords)); // coordinates
} }

View File

@ -147,22 +147,18 @@ expected_texture_overload_spirv expected_texture_overload(
%9 = OpTypeVector %4 4 %9 = OpTypeVector %4 4
%12 = OpTypeSampledImage %3 %12 = OpTypeSampledImage %3
%14 = OpTypeVector %4 3 %14 = OpTypeVector %4 3
%15 = OpTypeVector %4 2 %15 = OpConstant %4 1
%16 = OpConstant %4 1 %16 = OpConstant %4 2
%17 = OpConstant %4 2 %18 = OpTypeInt 32 0
%18 = OpConstantComposite %15 %16 %17 %19 = OpConstant %18 3
%22 = OpTypeInt 32 0
%23 = OpConstant %22 3
)", )",
R"( R"(
%10 = OpLoad %7 %5 %10 = OpLoad %7 %5
%11 = OpLoad %3 %1 %11 = OpLoad %3 %1
%13 = OpSampledImage %12 %11 %10 %13 = OpSampledImage %12 %11 %10
%19 = OpCompositeExtract %4 %18 0 %17 = OpConvertUToF %4 %19
%20 = OpCompositeExtract %4 %18 1 %20 = OpCompositeConstruct %14 %15 %16 %17
%21 = OpConvertUToF %4 %23 %8 = OpImageSampleImplicitLod %9 %13 %20
%24 = OpCompositeConstruct %14 %19 %20 %21
%8 = OpImageSampleImplicitLod %9 %13 %24
)"}; )"};
case ValidTextureOverload::kSample2dArrayOffsetF32: case ValidTextureOverload::kSample2dArrayOffsetF32:
return { return {
@ -177,27 +173,23 @@ expected_texture_overload_spirv expected_texture_overload(
%9 = OpTypeVector %4 4 %9 = OpTypeVector %4 4
%12 = OpTypeSampledImage %3 %12 = OpTypeSampledImage %3
%14 = OpTypeVector %4 3 %14 = OpTypeVector %4 3
%15 = OpTypeVector %4 2 %15 = OpConstant %4 1
%16 = OpConstant %4 1 %16 = OpConstant %4 2
%17 = OpConstant %4 2 %18 = OpTypeInt 32 0
%18 = OpConstantComposite %15 %16 %17 %19 = OpConstant %18 3
%22 = OpTypeInt 32 0 %22 = OpTypeInt 32 1
%23 = OpConstant %22 3 %21 = OpTypeVector %22 2
%26 = OpTypeInt 32 1 %23 = OpConstant %22 4
%25 = OpTypeVector %26 2 %24 = OpConstant %22 5
%27 = OpConstant %26 4 %25 = OpConstantComposite %21 %23 %24
%28 = OpConstant %26 5
%29 = OpConstantComposite %25 %27 %28
)", )",
R"( R"(
%10 = OpLoad %7 %5 %10 = OpLoad %7 %5
%11 = OpLoad %3 %1 %11 = OpLoad %3 %1
%13 = OpSampledImage %12 %11 %10 %13 = OpSampledImage %12 %11 %10
%19 = OpCompositeExtract %4 %18 0 %17 = OpConvertUToF %4 %19
%20 = OpCompositeExtract %4 %18 1 %20 = OpCompositeConstruct %14 %15 %16 %17
%21 = OpConvertUToF %4 %23 %8 = OpImageSampleImplicitLod %9 %13 %20 Offset %25
%24 = OpCompositeConstruct %14 %19 %20 %21
%8 = OpImageSampleImplicitLod %9 %13 %24 Offset %29
)"}; )"};
case ValidTextureOverload::kSample3dF32: case ValidTextureOverload::kSample3dF32:
return { return {
@ -289,24 +281,19 @@ expected_texture_overload_spirv expected_texture_overload(
%5 = OpVariable %6 Private %5 = OpVariable %6 Private
%9 = OpTypeVector %4 4 %9 = OpTypeVector %4 4
%12 = OpTypeSampledImage %3 %12 = OpTypeSampledImage %3
%14 = OpTypeVector %4 3 %14 = OpConstant %4 1
%15 = OpConstant %4 1 %15 = OpConstant %4 2
%16 = OpConstant %4 2 %16 = OpConstant %4 3
%17 = OpConstant %4 3 %18 = OpTypeInt 32 0
%18 = OpConstantComposite %14 %15 %16 %17 %19 = OpConstant %18 4
%23 = OpTypeInt 32 0
%24 = OpConstant %23 4
)", )",
R"( R"(
%10 = OpLoad %7 %5 %10 = OpLoad %7 %5
%11 = OpLoad %3 %1 %11 = OpLoad %3 %1
%13 = OpSampledImage %12 %11 %10 %13 = OpSampledImage %12 %11 %10
%19 = OpCompositeExtract %4 %18 0 %17 = OpConvertUToF %4 %19
%20 = OpCompositeExtract %4 %18 1 %20 = OpCompositeConstruct %9 %14 %15 %16 %17
%21 = OpCompositeExtract %4 %18 2 %8 = OpImageSampleImplicitLod %9 %13 %20
%22 = OpConvertUToF %4 %24
%25 = OpCompositeConstruct %9 %19 %20 %21 %22
%8 = OpImageSampleImplicitLod %9 %13 %25
)"}; )"};
case ValidTextureOverload::kSampleDepth2dF32: case ValidTextureOverload::kSampleDepth2dF32:
return { return {
@ -369,22 +356,18 @@ expected_texture_overload_spirv expected_texture_overload(
%5 = OpVariable %6 Private %5 = OpVariable %6 Private
%11 = OpTypeSampledImage %3 %11 = OpTypeSampledImage %3
%13 = OpTypeVector %4 3 %13 = OpTypeVector %4 3
%14 = OpTypeVector %4 2 %14 = OpConstant %4 1
%15 = OpConstant %4 1 %15 = OpConstant %4 2
%16 = OpConstant %4 2 %17 = OpTypeInt 32 0
%17 = OpConstantComposite %14 %15 %16 %18 = OpConstant %17 3
%21 = OpTypeInt 32 0
%22 = OpConstant %21 3
)", )",
R"( R"(
%9 = OpLoad %7 %5 %9 = OpLoad %7 %5
%10 = OpLoad %3 %1 %10 = OpLoad %3 %1
%12 = OpSampledImage %11 %10 %9 %12 = OpSampledImage %11 %10 %9
%18 = OpCompositeExtract %4 %17 0 %16 = OpConvertUToF %4 %18
%19 = OpCompositeExtract %4 %17 1 %19 = OpCompositeConstruct %13 %14 %15 %16
%20 = OpConvertUToF %4 %22 %8 = OpImageSampleImplicitLod %4 %12 %19
%23 = OpCompositeConstruct %13 %18 %19 %20
%8 = OpImageSampleImplicitLod %4 %12 %23
)"}; )"};
case ValidTextureOverload::kSampleDepth2dArrayOffsetF32: case ValidTextureOverload::kSampleDepth2dArrayOffsetF32:
return { return {
@ -398,27 +381,23 @@ expected_texture_overload_spirv expected_texture_overload(
%5 = OpVariable %6 Private %5 = OpVariable %6 Private
%11 = OpTypeSampledImage %3 %11 = OpTypeSampledImage %3
%13 = OpTypeVector %4 3 %13 = OpTypeVector %4 3
%14 = OpTypeVector %4 2 %14 = OpConstant %4 1
%15 = OpConstant %4 1 %15 = OpConstant %4 2
%16 = OpConstant %4 2 %17 = OpTypeInt 32 0
%17 = OpConstantComposite %14 %15 %16 %18 = OpConstant %17 3
%21 = OpTypeInt 32 0 %21 = OpTypeInt 32 1
%22 = OpConstant %21 3 %20 = OpTypeVector %21 2
%25 = OpTypeInt 32 1 %22 = OpConstant %21 4
%24 = OpTypeVector %25 2 %23 = OpConstant %21 5
%26 = OpConstant %25 4 %24 = OpConstantComposite %20 %22 %23
%27 = OpConstant %25 5
%28 = OpConstantComposite %24 %26 %27
)", )",
R"( R"(
%9 = OpLoad %7 %5 %9 = OpLoad %7 %5
%10 = OpLoad %3 %1 %10 = OpLoad %3 %1
%12 = OpSampledImage %11 %10 %9 %12 = OpSampledImage %11 %10 %9
%18 = OpCompositeExtract %4 %17 0 %16 = OpConvertUToF %4 %18
%19 = OpCompositeExtract %4 %17 1 %19 = OpCompositeConstruct %13 %14 %15 %16
%20 = OpConvertUToF %4 %22 %8 = OpImageSampleImplicitLod %4 %12 %19 Offset %24
%23 = OpCompositeConstruct %13 %18 %19 %20
%8 = OpImageSampleImplicitLod %4 %12 %23 Offset %28
)"}; )"};
case ValidTextureOverload::kSampleDepthCubeF32: case ValidTextureOverload::kSampleDepthCubeF32:
return { return {
@ -455,24 +434,19 @@ expected_texture_overload_spirv expected_texture_overload(
%5 = OpVariable %6 Private %5 = OpVariable %6 Private
%11 = OpTypeSampledImage %3 %11 = OpTypeSampledImage %3
%13 = OpTypeVector %4 4 %13 = OpTypeVector %4 4
%14 = OpTypeVector %4 3 %14 = OpConstant %4 1
%15 = OpConstant %4 1 %15 = OpConstant %4 2
%16 = OpConstant %4 2 %16 = OpConstant %4 3
%17 = OpConstant %4 3 %18 = OpTypeInt 32 0
%18 = OpConstantComposite %14 %15 %16 %17 %19 = OpConstant %18 4
%23 = OpTypeInt 32 0
%24 = OpConstant %23 4
)", )",
R"( R"(
%9 = OpLoad %7 %5 %9 = OpLoad %7 %5
%10 = OpLoad %3 %1 %10 = OpLoad %3 %1
%12 = OpSampledImage %11 %10 %9 %12 = OpSampledImage %11 %10 %9
%19 = OpCompositeExtract %4 %18 0 %17 = OpConvertUToF %4 %19
%20 = OpCompositeExtract %4 %18 1 %20 = OpCompositeConstruct %13 %14 %15 %16 %17
%21 = OpCompositeExtract %4 %18 2 %8 = OpImageSampleImplicitLod %4 %12 %20
%22 = OpConvertUToF %4 %24
%25 = OpCompositeConstruct %13 %19 %20 %21 %22
%8 = OpImageSampleImplicitLod %4 %12 %25
)"}; )"};
case ValidTextureOverload::kSampleBias2dF32: case ValidTextureOverload::kSampleBias2dF32:
return { return {
@ -540,23 +514,19 @@ expected_texture_overload_spirv expected_texture_overload(
%9 = OpTypeVector %4 4 %9 = OpTypeVector %4 4
%12 = OpTypeSampledImage %3 %12 = OpTypeSampledImage %3
%14 = OpTypeVector %4 3 %14 = OpTypeVector %4 3
%15 = OpTypeVector %4 2 %15 = OpConstant %4 1
%16 = OpConstant %4 1 %16 = OpConstant %4 2
%17 = OpConstant %4 2 %18 = OpTypeInt 32 0
%18 = OpConstantComposite %15 %16 %17 %19 = OpConstant %18 4
%22 = OpTypeInt 32 0 %21 = OpConstant %4 3
%23 = OpConstant %22 4
%25 = OpConstant %4 3
)", )",
R"( R"(
%10 = OpLoad %7 %5 %10 = OpLoad %7 %5
%11 = OpLoad %3 %1 %11 = OpLoad %3 %1
%13 = OpSampledImage %12 %11 %10 %13 = OpSampledImage %12 %11 %10
%19 = OpCompositeExtract %4 %18 0 %17 = OpConvertUToF %4 %19
%20 = OpCompositeExtract %4 %18 1 %20 = OpCompositeConstruct %14 %15 %16 %17
%21 = OpConvertUToF %4 %23 %8 = OpImageSampleImplicitLod %9 %13 %20 Bias %21
%24 = OpCompositeConstruct %14 %19 %20 %21
%8 = OpImageSampleImplicitLod %9 %13 %24 Bias %25
)"}; )"};
case ValidTextureOverload::kSampleBias2dArrayOffsetF32: case ValidTextureOverload::kSampleBias2dArrayOffsetF32:
return { return {
@ -571,28 +541,24 @@ expected_texture_overload_spirv expected_texture_overload(
%9 = OpTypeVector %4 4 %9 = OpTypeVector %4 4
%12 = OpTypeSampledImage %3 %12 = OpTypeSampledImage %3
%14 = OpTypeVector %4 3 %14 = OpTypeVector %4 3
%15 = OpTypeVector %4 2 %15 = OpConstant %4 1
%16 = OpConstant %4 1 %16 = OpConstant %4 2
%17 = OpConstant %4 2 %18 = OpTypeInt 32 0
%18 = OpConstantComposite %15 %16 %17 %19 = OpConstant %18 3
%22 = OpTypeInt 32 0 %21 = OpConstant %4 4
%23 = OpConstant %22 3 %23 = OpTypeInt 32 1
%25 = OpConstant %4 4 %22 = OpTypeVector %23 2
%27 = OpTypeInt 32 1 %24 = OpConstant %23 5
%26 = OpTypeVector %27 2 %25 = OpConstant %23 6
%28 = OpConstant %27 5 %26 = OpConstantComposite %22 %24 %25
%29 = OpConstant %27 6
%30 = OpConstantComposite %26 %28 %29
)", )",
R"( R"(
%10 = OpLoad %7 %5 %10 = OpLoad %7 %5
%11 = OpLoad %3 %1 %11 = OpLoad %3 %1
%13 = OpSampledImage %12 %11 %10 %13 = OpSampledImage %12 %11 %10
%19 = OpCompositeExtract %4 %18 0 %17 = OpConvertUToF %4 %19
%20 = OpCompositeExtract %4 %18 1 %20 = OpCompositeConstruct %14 %15 %16 %17
%21 = OpConvertUToF %4 %23 %8 = OpImageSampleImplicitLod %9 %13 %20 Bias|Offset %21 %26
%24 = OpCompositeConstruct %14 %19 %20 %21
%8 = OpImageSampleImplicitLod %9 %13 %24 Bias|Offset %25 %30
)"}; )"};
case ValidTextureOverload::kSampleBias3dF32: case ValidTextureOverload::kSampleBias3dF32:
return { return {
@ -687,25 +653,20 @@ expected_texture_overload_spirv expected_texture_overload(
%5 = OpVariable %6 Private %5 = OpVariable %6 Private
%9 = OpTypeVector %4 4 %9 = OpTypeVector %4 4
%12 = OpTypeSampledImage %3 %12 = OpTypeSampledImage %3
%14 = OpTypeVector %4 3 %14 = OpConstant %4 1
%15 = OpConstant %4 1 %15 = OpConstant %4 2
%16 = OpConstant %4 2 %16 = OpConstant %4 3
%17 = OpConstant %4 3 %18 = OpTypeInt 32 0
%18 = OpConstantComposite %14 %15 %16 %17 %19 = OpConstant %18 3
%23 = OpTypeInt 32 0 %21 = OpConstant %4 4
%24 = OpConstant %23 3
%26 = OpConstant %4 4
)", )",
R"( R"(
%10 = OpLoad %7 %5 %10 = OpLoad %7 %5
%11 = OpLoad %3 %1 %11 = OpLoad %3 %1
%13 = OpSampledImage %12 %11 %10 %13 = OpSampledImage %12 %11 %10
%19 = OpCompositeExtract %4 %18 0 %17 = OpConvertUToF %4 %19
%20 = OpCompositeExtract %4 %18 1 %20 = OpCompositeConstruct %9 %14 %15 %16 %17
%21 = OpCompositeExtract %4 %18 2 %8 = OpImageSampleImplicitLod %9 %13 %20 Bias %21
%22 = OpConvertUToF %4 %24
%25 = OpCompositeConstruct %9 %19 %20 %21 %22
%8 = OpImageSampleImplicitLod %9 %13 %25 Bias %26
)"}; )"};
case ValidTextureOverload::kSampleLevel2dF32: case ValidTextureOverload::kSampleLevel2dF32:
return { return {
@ -773,23 +734,19 @@ expected_texture_overload_spirv expected_texture_overload(
%9 = OpTypeVector %4 4 %9 = OpTypeVector %4 4
%12 = OpTypeSampledImage %3 %12 = OpTypeSampledImage %3
%14 = OpTypeVector %4 3 %14 = OpTypeVector %4 3
%15 = OpTypeVector %4 2 %15 = OpConstant %4 1
%16 = OpConstant %4 1 %16 = OpConstant %4 2
%17 = OpConstant %4 2 %18 = OpTypeInt 32 0
%18 = OpConstantComposite %15 %16 %17 %19 = OpConstant %18 3
%22 = OpTypeInt 32 0 %21 = OpConstant %4 4
%23 = OpConstant %22 3
%25 = OpConstant %4 4
)", )",
R"( R"(
%10 = OpLoad %7 %5 %10 = OpLoad %7 %5
%11 = OpLoad %3 %1 %11 = OpLoad %3 %1
%13 = OpSampledImage %12 %11 %10 %13 = OpSampledImage %12 %11 %10
%19 = OpCompositeExtract %4 %18 0 %17 = OpConvertUToF %4 %19
%20 = OpCompositeExtract %4 %18 1 %20 = OpCompositeConstruct %14 %15 %16 %17
%21 = OpConvertUToF %4 %23 %8 = OpImageSampleExplicitLod %9 %13 %20 Lod %21
%24 = OpCompositeConstruct %14 %19 %20 %21
%8 = OpImageSampleExplicitLod %9 %13 %24 Lod %25
)"}; )"};
case ValidTextureOverload::kSampleLevel2dArrayOffsetF32: case ValidTextureOverload::kSampleLevel2dArrayOffsetF32:
return { return {
@ -804,28 +761,24 @@ expected_texture_overload_spirv expected_texture_overload(
%9 = OpTypeVector %4 4 %9 = OpTypeVector %4 4
%12 = OpTypeSampledImage %3 %12 = OpTypeSampledImage %3
%14 = OpTypeVector %4 3 %14 = OpTypeVector %4 3
%15 = OpTypeVector %4 2 %15 = OpConstant %4 1
%16 = OpConstant %4 1 %16 = OpConstant %4 2
%17 = OpConstant %4 2 %18 = OpTypeInt 32 0
%18 = OpConstantComposite %15 %16 %17 %19 = OpConstant %18 3
%22 = OpTypeInt 32 0 %21 = OpConstant %4 4
%23 = OpConstant %22 3 %23 = OpTypeInt 32 1
%25 = OpConstant %4 4 %22 = OpTypeVector %23 2
%27 = OpTypeInt 32 1 %24 = OpConstant %23 5
%26 = OpTypeVector %27 2 %25 = OpConstant %23 6
%28 = OpConstant %27 5 %26 = OpConstantComposite %22 %24 %25
%29 = OpConstant %27 6
%30 = OpConstantComposite %26 %28 %29
)", )",
R"( R"(
%10 = OpLoad %7 %5 %10 = OpLoad %7 %5
%11 = OpLoad %3 %1 %11 = OpLoad %3 %1
%13 = OpSampledImage %12 %11 %10 %13 = OpSampledImage %12 %11 %10
%19 = OpCompositeExtract %4 %18 0 %17 = OpConvertUToF %4 %19
%20 = OpCompositeExtract %4 %18 1 %20 = OpCompositeConstruct %14 %15 %16 %17
%21 = OpConvertUToF %4 %23 %8 = OpImageSampleExplicitLod %9 %13 %20 Lod|Offset %21 %26
%24 = OpCompositeConstruct %14 %19 %20 %21
%8 = OpImageSampleExplicitLod %9 %13 %24 Lod|Offset %25 %30
)"}; )"};
case ValidTextureOverload::kSampleLevel3dF32: case ValidTextureOverload::kSampleLevel3dF32:
return { return {
@ -920,25 +873,20 @@ expected_texture_overload_spirv expected_texture_overload(
%5 = OpVariable %6 Private %5 = OpVariable %6 Private
%9 = OpTypeVector %4 4 %9 = OpTypeVector %4 4
%12 = OpTypeSampledImage %3 %12 = OpTypeSampledImage %3
%14 = OpTypeVector %4 3 %14 = OpConstant %4 1
%15 = OpConstant %4 1 %15 = OpConstant %4 2
%16 = OpConstant %4 2 %16 = OpConstant %4 3
%17 = OpConstant %4 3 %18 = OpTypeInt 32 0
%18 = OpConstantComposite %14 %15 %16 %17 %19 = OpConstant %18 4
%23 = OpTypeInt 32 0 %21 = OpConstant %4 5
%24 = OpConstant %23 4
%26 = OpConstant %4 5
)", )",
R"( R"(
%10 = OpLoad %7 %5 %10 = OpLoad %7 %5
%11 = OpLoad %3 %1 %11 = OpLoad %3 %1
%13 = OpSampledImage %12 %11 %10 %13 = OpSampledImage %12 %11 %10
%19 = OpCompositeExtract %4 %18 0 %17 = OpConvertUToF %4 %19
%20 = OpCompositeExtract %4 %18 1 %20 = OpCompositeConstruct %9 %14 %15 %16 %17
%21 = OpCompositeExtract %4 %18 2 %8 = OpImageSampleExplicitLod %9 %13 %20 Lod %21
%22 = OpConvertUToF %4 %24
%25 = OpCompositeConstruct %9 %19 %20 %21 %22
%8 = OpImageSampleExplicitLod %9 %13 %25 Lod %26
)"}; )"};
case ValidTextureOverload::kSampleLevelDepth2dF32: case ValidTextureOverload::kSampleLevelDepth2dF32:
return { return {
@ -1005,23 +953,19 @@ expected_texture_overload_spirv expected_texture_overload(
%5 = OpVariable %6 Private %5 = OpVariable %6 Private
%11 = OpTypeSampledImage %3 %11 = OpTypeSampledImage %3
%13 = OpTypeVector %4 3 %13 = OpTypeVector %4 3
%14 = OpTypeVector %4 2 %14 = OpConstant %4 1
%15 = OpConstant %4 1 %15 = OpConstant %4 2
%16 = OpConstant %4 2 %17 = OpTypeInt 32 0
%17 = OpConstantComposite %14 %15 %16 %18 = OpConstant %17 3
%21 = OpTypeInt 32 0 %20 = OpConstant %17 4
%22 = OpConstant %21 3
%24 = OpConstant %21 4
)", )",
R"( R"(
%9 = OpLoad %7 %5 %9 = OpLoad %7 %5
%10 = OpLoad %3 %1 %10 = OpLoad %3 %1
%12 = OpSampledImage %11 %10 %9 %12 = OpSampledImage %11 %10 %9
%18 = OpCompositeExtract %4 %17 0 %16 = OpConvertUToF %4 %18
%19 = OpCompositeExtract %4 %17 1 %19 = OpCompositeConstruct %13 %14 %15 %16
%20 = OpConvertUToF %4 %22 %8 = OpImageSampleExplicitLod %4 %12 %19 Lod %20
%23 = OpCompositeConstruct %13 %18 %19 %20
%8 = OpImageSampleExplicitLod %4 %12 %23 Lod %24
)"}; )"};
case ValidTextureOverload::kSampleLevelDepth2dArrayOffsetF32: case ValidTextureOverload::kSampleLevelDepth2dArrayOffsetF32:
return { return {
@ -1035,28 +979,24 @@ expected_texture_overload_spirv expected_texture_overload(
%5 = OpVariable %6 Private %5 = OpVariable %6 Private
%11 = OpTypeSampledImage %3 %11 = OpTypeSampledImage %3
%13 = OpTypeVector %4 3 %13 = OpTypeVector %4 3
%14 = OpTypeVector %4 2 %14 = OpConstant %4 1
%15 = OpConstant %4 1 %15 = OpConstant %4 2
%16 = OpConstant %4 2 %17 = OpTypeInt 32 0
%17 = OpConstantComposite %14 %15 %16 %18 = OpConstant %17 3
%21 = OpTypeInt 32 0 %20 = OpConstant %17 4
%22 = OpConstant %21 3 %22 = OpTypeInt 32 1
%24 = OpConstant %21 4 %21 = OpTypeVector %22 2
%26 = OpTypeInt 32 1 %23 = OpConstant %22 5
%25 = OpTypeVector %26 2 %24 = OpConstant %22 6
%27 = OpConstant %26 5 %25 = OpConstantComposite %21 %23 %24
%28 = OpConstant %26 6
%29 = OpConstantComposite %25 %27 %28
)", )",
R"( R"(
%9 = OpLoad %7 %5 %9 = OpLoad %7 %5
%10 = OpLoad %3 %1 %10 = OpLoad %3 %1
%12 = OpSampledImage %11 %10 %9 %12 = OpSampledImage %11 %10 %9
%18 = OpCompositeExtract %4 %17 0 %16 = OpConvertUToF %4 %18
%19 = OpCompositeExtract %4 %17 1 %19 = OpCompositeConstruct %13 %14 %15 %16
%20 = OpConvertUToF %4 %22 %8 = OpImageSampleExplicitLod %4 %12 %19 Lod|Offset %20 %25
%23 = OpCompositeConstruct %13 %18 %19 %20
%8 = OpImageSampleExplicitLod %4 %12 %23 Lod|Offset %24 %29
)"}; )"};
case ValidTextureOverload::kSampleLevelDepthCubeF32: case ValidTextureOverload::kSampleLevelDepthCubeF32:
return { return {
@ -1095,25 +1035,20 @@ expected_texture_overload_spirv expected_texture_overload(
%5 = OpVariable %6 Private %5 = OpVariable %6 Private
%11 = OpTypeSampledImage %3 %11 = OpTypeSampledImage %3
%13 = OpTypeVector %4 4 %13 = OpTypeVector %4 4
%14 = OpTypeVector %4 3 %14 = OpConstant %4 1
%15 = OpConstant %4 1 %15 = OpConstant %4 2
%16 = OpConstant %4 2 %16 = OpConstant %4 3
%17 = OpConstant %4 3 %18 = OpTypeInt 32 0
%18 = OpConstantComposite %14 %15 %16 %17 %19 = OpConstant %18 4
%23 = OpTypeInt 32 0 %21 = OpConstant %18 5
%24 = OpConstant %23 4
%26 = OpConstant %23 5
)", )",
R"( R"(
%9 = OpLoad %7 %5 %9 = OpLoad %7 %5
%10 = OpLoad %3 %1 %10 = OpLoad %3 %1
%12 = OpSampledImage %11 %10 %9 %12 = OpSampledImage %11 %10 %9
%19 = OpCompositeExtract %4 %18 0 %17 = OpConvertUToF %4 %19
%20 = OpCompositeExtract %4 %18 1 %20 = OpCompositeConstruct %13 %14 %15 %16 %17
%21 = OpCompositeExtract %4 %18 2 %8 = OpImageSampleExplicitLod %4 %12 %20 Lod %21
%22 = OpConvertUToF %4 %24
%25 = OpCompositeConstruct %13 %19 %20 %21 %22
%8 = OpImageSampleExplicitLod %4 %12 %25 Lod %26
)"}; )"};
case ValidTextureOverload::kSampleGrad2dF32: case ValidTextureOverload::kSampleGrad2dF32:
return { return {
@ -1191,28 +1126,25 @@ expected_texture_overload_spirv expected_texture_overload(
%9 = OpTypeVector %4 4 %9 = OpTypeVector %4 4
%12 = OpTypeSampledImage %3 %12 = OpTypeSampledImage %3
%14 = OpTypeVector %4 3 %14 = OpTypeVector %4 3
%15 = OpTypeVector %4 2 %15 = OpConstant %4 1
%16 = OpConstant %4 1 %16 = OpConstant %4 2
%17 = OpConstant %4 2 %18 = OpTypeInt 32 0
%18 = OpConstantComposite %15 %16 %17 %19 = OpConstant %18 3
%22 = OpTypeInt 32 0 %21 = OpTypeVector %4 2
%23 = OpConstant %22 3 %22 = OpConstant %4 4
%25 = OpConstant %4 4 %23 = OpConstant %4 5
%26 = OpConstant %4 5 %24 = OpConstantComposite %21 %22 %23
%27 = OpConstantComposite %15 %25 %26 %25 = OpConstant %4 6
%28 = OpConstant %4 6 %26 = OpConstant %4 7
%29 = OpConstant %4 7 %27 = OpConstantComposite %21 %25 %26
%30 = OpConstantComposite %15 %28 %29
)", )",
R"( R"(
%10 = OpLoad %7 %5 %10 = OpLoad %7 %5
%11 = OpLoad %3 %1 %11 = OpLoad %3 %1
%13 = OpSampledImage %12 %11 %10 %13 = OpSampledImage %12 %11 %10
%19 = OpCompositeExtract %4 %18 0 %17 = OpConvertUToF %4 %19
%20 = OpCompositeExtract %4 %18 1 %20 = OpCompositeConstruct %14 %15 %16 %17
%21 = OpConvertUToF %4 %23 %8 = OpImageSampleExplicitLod %9 %13 %20 Grad %24 %27
%24 = OpCompositeConstruct %14 %19 %20 %21
%8 = OpImageSampleExplicitLod %9 %13 %24 Grad %27 %30
)"}; )"};
case ValidTextureOverload::kSampleGrad2dArrayOffsetF32: case ValidTextureOverload::kSampleGrad2dArrayOffsetF32:
return { return {
@ -1227,33 +1159,30 @@ expected_texture_overload_spirv expected_texture_overload(
%9 = OpTypeVector %4 4 %9 = OpTypeVector %4 4
%12 = OpTypeSampledImage %3 %12 = OpTypeSampledImage %3
%14 = OpTypeVector %4 3 %14 = OpTypeVector %4 3
%15 = OpTypeVector %4 2 %15 = OpConstant %4 1
%16 = OpConstant %4 1 %16 = OpConstant %4 2
%17 = OpConstant %4 2 %18 = OpTypeInt 32 0
%18 = OpConstantComposite %15 %16 %17 %19 = OpConstant %18 3
%22 = OpTypeInt 32 0 %21 = OpTypeVector %4 2
%23 = OpConstant %22 3 %22 = OpConstant %4 4
%25 = OpConstant %4 4 %23 = OpConstant %4 5
%26 = OpConstant %4 5 %24 = OpConstantComposite %21 %22 %23
%27 = OpConstantComposite %15 %25 %26 %25 = OpConstant %4 6
%28 = OpConstant %4 6 %26 = OpConstant %4 7
%29 = OpConstant %4 7 %27 = OpConstantComposite %21 %25 %26
%30 = OpConstantComposite %15 %28 %29 %29 = OpTypeInt 32 1
%32 = OpTypeInt 32 1 %28 = OpTypeVector %29 2
%31 = OpTypeVector %32 2 %30 = OpConstant %29 8
%33 = OpConstant %32 8 %31 = OpConstant %29 9
%34 = OpConstant %32 9 %32 = OpConstantComposite %28 %30 %31
%35 = OpConstantComposite %31 %33 %34
)", )",
R"( R"(
%10 = OpLoad %7 %5 %10 = OpLoad %7 %5
%11 = OpLoad %3 %1 %11 = OpLoad %3 %1
%13 = OpSampledImage %12 %11 %10 %13 = OpSampledImage %12 %11 %10
%19 = OpCompositeExtract %4 %18 0 %17 = OpConvertUToF %4 %19
%20 = OpCompositeExtract %4 %18 1 %20 = OpCompositeConstruct %14 %15 %16 %17
%21 = OpConvertUToF %4 %23 %8 = OpImageSampleExplicitLod %9 %13 %20 Grad|Offset %24 %27 %32
%24 = OpCompositeConstruct %14 %19 %20 %21
%8 = OpImageSampleExplicitLod %9 %13 %24 Grad|Offset %27 %30 %35
)"}; )"};
case ValidTextureOverload::kSampleGrad3dF32: case ValidTextureOverload::kSampleGrad3dF32:
return { return {
@ -1369,32 +1298,28 @@ expected_texture_overload_spirv expected_texture_overload(
%5 = OpVariable %6 Private %5 = OpVariable %6 Private
%9 = OpTypeVector %4 4 %9 = OpTypeVector %4 4
%12 = OpTypeSampledImage %3 %12 = OpTypeSampledImage %3
%14 = OpTypeVector %4 3 %14 = OpConstant %4 1
%15 = OpConstant %4 1 %15 = OpConstant %4 2
%16 = OpConstant %4 2 %16 = OpConstant %4 3
%17 = OpConstant %4 3 %18 = OpTypeInt 32 0
%18 = OpConstantComposite %14 %15 %16 %17 %19 = OpConstant %18 4
%23 = OpTypeInt 32 0 %21 = OpTypeVector %4 3
%24 = OpConstant %23 4 %22 = OpConstant %4 5
%26 = OpConstant %4 5 %23 = OpConstant %4 6
%27 = OpConstant %4 6 %24 = OpConstant %4 7
%28 = OpConstant %4 7 %25 = OpConstantComposite %21 %22 %23 %24
%29 = OpConstantComposite %14 %26 %27 %28 %26 = OpConstant %4 8
%30 = OpConstant %4 8 %27 = OpConstant %4 9
%31 = OpConstant %4 9 %28 = OpConstant %4 10
%32 = OpConstant %4 10 %29 = OpConstantComposite %21 %26 %27 %28
%33 = OpConstantComposite %14 %30 %31 %32
)", )",
R"( R"(
%10 = OpLoad %7 %5 %10 = OpLoad %7 %5
%11 = OpLoad %3 %1 %11 = OpLoad %3 %1
%13 = OpSampledImage %12 %11 %10 %13 = OpSampledImage %12 %11 %10
%19 = OpCompositeExtract %4 %18 0 %17 = OpConvertUToF %4 %19
%20 = OpCompositeExtract %4 %18 1 %20 = OpCompositeConstruct %9 %14 %15 %16 %17
%21 = OpCompositeExtract %4 %18 2 %8 = OpImageSampleExplicitLod %9 %13 %20 Grad %25 %29
%22 = OpConvertUToF %4 %24
%25 = OpCompositeConstruct %9 %19 %20 %21 %22
%8 = OpImageSampleExplicitLod %9 %13 %25 Grad %29 %33
)"}; )"};
case ValidTextureOverload::kSampleGradDepth2dF32: case ValidTextureOverload::kSampleGradDepth2dF32:
return { return {
@ -1461,24 +1386,20 @@ expected_texture_overload_spirv expected_texture_overload(
%5 = OpVariable %6 Private %5 = OpVariable %6 Private
%11 = OpTypeSampledImage %3 %11 = OpTypeSampledImage %3
%13 = OpTypeVector %4 3 %13 = OpTypeVector %4 3
%14 = OpTypeVector %4 2 %14 = OpConstant %4 1
%15 = OpConstant %4 1 %15 = OpConstant %4 2
%16 = OpConstant %4 2 %17 = OpTypeInt 32 0
%17 = OpConstantComposite %14 %15 %16 %18 = OpConstant %17 4
%21 = OpTypeInt 32 0 %20 = OpConstant %4 3
%22 = OpConstant %21 4 %21 = OpConstant %4 0
%24 = OpConstant %4 3
%25 = OpConstant %4 0
)", )",
R"( R"(
%9 = OpLoad %7 %5 %9 = OpLoad %7 %5
%10 = OpLoad %3 %1 %10 = OpLoad %3 %1
%12 = OpSampledImage %11 %10 %9 %12 = OpSampledImage %11 %10 %9
%18 = OpCompositeExtract %4 %17 0 %16 = OpConvertUToF %4 %18
%19 = OpCompositeExtract %4 %17 1 %19 = OpCompositeConstruct %13 %14 %15 %16
%20 = OpConvertUToF %4 %22 %8 = OpImageSampleDrefExplicitLod %4 %12 %19 %20 Lod %21
%23 = OpCompositeConstruct %13 %18 %19 %20
%8 = OpImageSampleDrefExplicitLod %4 %12 %23 %24 Lod %25
)"}; )"};
case ValidTextureOverload::kSampleGradDepth2dArrayOffsetF32: case ValidTextureOverload::kSampleGradDepth2dArrayOffsetF32:
return { return {
@ -1492,29 +1413,25 @@ expected_texture_overload_spirv expected_texture_overload(
%5 = OpVariable %6 Private %5 = OpVariable %6 Private
%11 = OpTypeSampledImage %3 %11 = OpTypeSampledImage %3
%13 = OpTypeVector %4 3 %13 = OpTypeVector %4 3
%14 = OpTypeVector %4 2 %14 = OpConstant %4 1
%15 = OpConstant %4 1 %15 = OpConstant %4 2
%16 = OpConstant %4 2 %17 = OpTypeInt 32 0
%17 = OpConstantComposite %14 %15 %16 %18 = OpConstant %17 4
%21 = OpTypeInt 32 0 %20 = OpConstant %4 3
%22 = OpConstant %21 4 %21 = OpConstant %4 0
%24 = OpConstant %4 3 %23 = OpTypeInt 32 1
%25 = OpConstant %4 0 %22 = OpTypeVector %23 2
%27 = OpTypeInt 32 1 %24 = OpConstant %23 5
%26 = OpTypeVector %27 2 %25 = OpConstant %23 6
%28 = OpConstant %27 5 %26 = OpConstantComposite %22 %24 %25
%29 = OpConstant %27 6
%30 = OpConstantComposite %26 %28 %29
)", )",
R"( R"(
%9 = OpLoad %7 %5 %9 = OpLoad %7 %5
%10 = OpLoad %3 %1 %10 = OpLoad %3 %1
%12 = OpSampledImage %11 %10 %9 %12 = OpSampledImage %11 %10 %9
%18 = OpCompositeExtract %4 %17 0 %16 = OpConvertUToF %4 %18
%19 = OpCompositeExtract %4 %17 1 %19 = OpCompositeConstruct %13 %14 %15 %16
%20 = OpConvertUToF %4 %22 %8 = OpImageSampleDrefExplicitLod %4 %12 %19 %20 Lod|Offset %21 %26
%23 = OpCompositeConstruct %13 %18 %19 %20
%8 = OpImageSampleDrefExplicitLod %4 %12 %23 %24 Lod|Offset %25 %30
)"}; )"};
case ValidTextureOverload::kSampleGradDepthCubeF32: case ValidTextureOverload::kSampleGradDepthCubeF32:
return { return {
@ -1553,26 +1470,21 @@ expected_texture_overload_spirv expected_texture_overload(
%5 = OpVariable %6 Private %5 = OpVariable %6 Private
%11 = OpTypeSampledImage %3 %11 = OpTypeSampledImage %3
%13 = OpTypeVector %4 4 %13 = OpTypeVector %4 4
%14 = OpTypeVector %4 3 %14 = OpConstant %4 1
%15 = OpConstant %4 1 %15 = OpConstant %4 2
%16 = OpConstant %4 2 %16 = OpConstant %4 3
%17 = OpConstant %4 3 %18 = OpTypeInt 32 0
%18 = OpConstantComposite %14 %15 %16 %17 %19 = OpConstant %18 4
%23 = OpTypeInt 32 0 %21 = OpConstant %4 5
%24 = OpConstant %23 4 %22 = OpConstant %4 0
%26 = OpConstant %4 5
%27 = OpConstant %4 0
)", )",
R"( R"(
%9 = OpLoad %7 %5 %9 = OpLoad %7 %5
%10 = OpLoad %3 %1 %10 = OpLoad %3 %1
%12 = OpSampledImage %11 %10 %9 %12 = OpSampledImage %11 %10 %9
%19 = OpCompositeExtract %4 %18 0 %17 = OpConvertUToF %4 %19
%20 = OpCompositeExtract %4 %18 1 %20 = OpCompositeConstruct %13 %14 %15 %16 %17
%21 = OpCompositeExtract %4 %18 2 %8 = OpImageSampleDrefExplicitLod %4 %12 %20 %21 Lod %22
%22 = OpConvertUToF %4 %24
%25 = OpCompositeConstruct %13 %19 %20 %21 %22
%8 = OpImageSampleDrefExplicitLod %4 %12 %25 %26 Lod %27
)"}; )"};
} }
return {"<unmatched texture overload>", "<unmatched texture overload>"}; return {"<unmatched texture overload>", "<unmatched texture overload>"};