For WebGPU<->Vulkan optimization, set correct execution environment (#2834)
Fixes #2833
diff --git a/include/spirv-tools/optimizer.hpp b/include/spirv-tools/optimizer.hpp
index 4a95a7e..509051d 100644
--- a/include/spirv-tools/optimizer.hpp
+++ b/include/spirv-tools/optimizer.hpp
@@ -68,6 +68,11 @@
// The constructed instance will have an empty message consumer, which just
// ignores all messages from the library. Use SetMessageConsumer() to supply
// one if messages are of concern.
+ //
+ // For collections of passes that are meant to transform the input into
+ // another execution environment, then the source environment should be
+ // supplied. e.g. for VulkanToWebGPUPasses the environment should be
+ // SPV_ENV_VULKAN_1_1 not SPV_ENV_WEBGPU_0.
explicit Optimizer(spv_target_env env);
// Disables copy/move constructor/assignment operations.
diff --git a/test/fuzzers/spvtools_opt_vulkantowebgpu_fuzzer.cpp b/test/fuzzers/spvtools_opt_vulkantowebgpu_fuzzer.cpp
index 0b2ecc3..9371c0d 100644
--- a/test/fuzzers/spvtools_opt_vulkantowebgpu_fuzzer.cpp
+++ b/test/fuzzers/spvtools_opt_vulkantowebgpu_fuzzer.cpp
@@ -18,7 +18,7 @@
#include "spirv-tools/optimizer.hpp"
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
- spvtools::Optimizer optimizer(SPV_ENV_WEBGPU_0);
+ spvtools::Optimizer optimizer(SPV_ENV_VULKAN_1_1);
optimizer.SetMessageConsumer([](spv_message_level_t, const char*,
const spv_position_t&, const char*) {});
diff --git a/test/fuzzers/spvtools_opt_webgputovulkan_fuzzer.cpp b/test/fuzzers/spvtools_opt_webgputovulkan_fuzzer.cpp
index 1e44857..78ddbb7 100644
--- a/test/fuzzers/spvtools_opt_webgputovulkan_fuzzer.cpp
+++ b/test/fuzzers/spvtools_opt_webgputovulkan_fuzzer.cpp
@@ -18,7 +18,7 @@
#include "spirv-tools/optimizer.hpp"
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
- spvtools::Optimizer optimizer(SPV_ENV_VULKAN_1_1);
+ spvtools::Optimizer optimizer(SPV_ENV_WEBGPU_0);
optimizer.SetMessageConsumer([](spv_message_level_t, const char*,
const spv_position_t&, const char*) {});
diff --git a/test/opt/optimizer_test.cpp b/test/opt/optimizer_test.cpp
index ee6e949..2f7666a 100644
--- a/test/opt/optimizer_test.cpp
+++ b/test/opt/optimizer_test.cpp
@@ -222,7 +222,7 @@
}
TEST(Optimizer, VulkanToWebGPUSetsCorrectPasses) {
- Optimizer opt(SPV_ENV_WEBGPU_0);
+ Optimizer opt(SPV_ENV_VULKAN_1_1);
opt.RegisterVulkanToWebGPUPasses();
std::vector<const char*> pass_names = opt.GetPassNames();
@@ -267,7 +267,7 @@
tools.Assemble(GetParam().input, &binary);
}
- Optimizer opt(SPV_ENV_WEBGPU_0);
+ Optimizer opt(SPV_ENV_VULKAN_1_1);
opt.RegisterVulkanToWebGPUPasses();
std::vector<uint32_t> optimized;
@@ -622,7 +622,7 @@
"compact-ids"}}));
TEST(Optimizer, WebGPUToVulkanSetsCorrectPasses) {
- Optimizer opt(SPV_ENV_VULKAN_1_1);
+ Optimizer opt(SPV_ENV_WEBGPU_0);
opt.RegisterWebGPUToVulkanPasses();
std::vector<const char*> pass_names = opt.GetPassNames();
@@ -659,7 +659,7 @@
tools.Assemble(GetParam().input, &binary);
}
- Optimizer opt(SPV_ENV_VULKAN_1_1);
+ Optimizer opt(SPV_ENV_WEBGPU_0);
opt.RegisterWebGPUToVulkanPasses();
std::vector<uint32_t> optimized;
diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp
index df76677..667b0e3 100644
--- a/tools/opt/opt.cpp
+++ b/tools/opt/opt.cpp
@@ -80,13 +80,13 @@
}
std::string GetVulkanToWebGPUPasses() {
- spvtools::Optimizer optimizer(SPV_ENV_WEBGPU_0);
+ spvtools::Optimizer optimizer(SPV_ENV_VULKAN_1_1);
optimizer.RegisterVulkanToWebGPUPasses();
return GetListOfPassesAsString(optimizer);
}
std::string GetWebGPUToVulkanPasses() {
- spvtools::Optimizer optimizer(SPV_ENV_VULKAN_1_1);
+ spvtools::Optimizer optimizer(SPV_ENV_WEBGPU_0);
optimizer.RegisterWebGPUToVulkanPasses();
return GetListOfPassesAsString(optimizer);
}
@@ -792,7 +792,7 @@
return {OPT_STOP, 1};
}
- optimizer->SetTargetEnv(SPV_ENV_WEBGPU_0);
+ optimizer->SetTargetEnv(SPV_ENV_VULKAN_1_1);
optimizer->RegisterVulkanToWebGPUPasses();
} else if (0 == strcmp(cur_arg, "--webgpu-to-vulkan")) {
webgpu_to_vulkan_set = true;
@@ -810,7 +810,7 @@
return {OPT_STOP, 1};
}
- optimizer->SetTargetEnv(SPV_ENV_VULKAN_1_1);
+ optimizer->SetTargetEnv(SPV_ENV_WEBGPU_0);
optimizer->RegisterWebGPUToVulkanPasses();
} else if (0 == strcmp(cur_arg, "--validate-after-all")) {
optimizer->SetValidateAfterAll(true);