spirv-writer: Add SampledCubeArray cap when needed Fixed: tint:371 Change-Id: I13f568725370f446f154af26c326edfd4abec3c8 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34003 Auto-Submit: David Neto <dneto@google.com> Commit-Queue: Ben Clayton <bclayton@google.com> Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc index 2681e9a..f87eb8f 100644 --- a/src/writer/spirv/builder.cc +++ b/src/writer/spirv/builder.cc
@@ -2479,7 +2479,7 @@ bool Builder::GenerateTextureType(ast::type::TextureType* texture, const Operand& result) { uint32_t array_literal = 0u; - auto dim = texture->dim(); + const auto dim = texture->dim(); if (dim == ast::type::TextureDimension::k1dArray || dim == ast::type::TextureDimension::k2dArray || dim == ast::type::TextureDimension::kCubeArray) { @@ -2520,6 +2520,12 @@ sampled_literal = 1u; } + if (dim == ast::type::TextureDimension::kCubeArray) { + if (texture->IsSampled() || texture->IsDepth()) { + push_capability(SpvCapabilitySampledCubeArray); + } + } + uint32_t type_id = 0u; if (texture->IsDepth()) { ast::type::F32Type f32;
diff --git a/src/writer/spirv/builder_type_test.cc b/src/writer/spirv/builder_type_test.cc index d7403ba..f72120d 100644 --- a/src/writer/spirv/builder_type_test.cc +++ b/src/writer/spirv/builder_type_test.cc
@@ -665,6 +665,7 @@ EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeFloat 32 %1 = OpTypeImage %2 Cube 1 0 0 1 Unknown )"); + EXPECT_EQ(DumpInstructions(b.capabilities()), ""); } TEST_F(BuilderTest_Type, DepthTexture_Generate_CubeArray) { @@ -678,6 +679,9 @@ EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeFloat 32 %1 = OpTypeImage %2 Cube 1 1 0 1 Unknown )"); + EXPECT_EQ(DumpInstructions(b.capabilities()), + R"(OpCapability SampledCubeArray +)"); } TEST_F(BuilderTest_Type, MultisampledTexture_Generate_2d_i32) { @@ -825,6 +829,7 @@ R"(%2 = OpTypeFloat 32 %1 = OpTypeImage %2 Cube 0 0 0 1 Unknown )"); + EXPECT_EQ(DumpInstructions(b.capabilities()), ""); } TEST_F(BuilderTest_Type, SampledTexture_Generate_CubeArray) { @@ -838,6 +843,9 @@ R"(%2 = OpTypeFloat 32 %1 = OpTypeImage %2 Cube 0 1 0 1 Unknown )"); + EXPECT_EQ(DumpInstructions(b.capabilities()), + R"(OpCapability SampledCubeArray +)"); } TEST_F(BuilderTest_Type, StorageTexture_GenerateReadonly_1d_R16Float) {