diff options
author | Ryan Harrison <zoddicus@users.noreply.github.com> | 2019-05-28 10:11:43 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-28 10:11:43 -0700 |
commit | 5a06fa466186698bcb0757bea201828e47527b98 (patch) | |
tree | 0bb9104192d93abbe86545788bd4ff777652765c /test | |
parent | 78b2b18661fc36330b15e47bf18a5594499b77df (diff) | |
download | spirv-tools-5a06fa466186698bcb0757bea201828e47527b98.tar.gz |
Add fuzzer for Vulkan->WebGPU spirv-opt passes (#2626)
Fixes #2622
Diffstat (limited to 'test')
-rw-r--r-- | test/fuzzers/BUILD.gn | 16 | ||||
-rw-r--r-- | test/fuzzers/spvtools_opt_vulkantowebgpu_fuzzer.cpp | 38 |
2 files changed, 54 insertions, 0 deletions
diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn index 9cfc2b49..65694f39 100644 --- a/test/fuzzers/BUILD.gn +++ b/test/fuzzers/BUILD.gn @@ -38,6 +38,7 @@ if (!build_with_chromium || use_fuzzing_engine) { ":spvtools_opt_performance_fuzzer", ":spvtools_opt_size_fuzzer", ":spvtools_opt_webgputovulkan_fuzzer", + ":spvtools_opt_vulkantowebgpu_fuzzer", ":spvtools_val_fuzzer", ] } @@ -88,12 +89,19 @@ spvtools_fuzzer("spvtools_opt_size_fuzzer_src") { ] } + spvtools_fuzzer("spvtools_opt_webgputovulkan_fuzzer_src") { sources = [ "spvtools_opt_webgputovulkan_fuzzer.cpp", ] } +spvtools_fuzzer("spvtools_opt_vulkantowebgpu_fuzzer_src") { + sources = [ + "spvtools_opt_vulkantowebgpu_fuzzer.cpp", + ] +} + spvtools_fuzzer("spvtools_val_fuzzer_src") { sources = [ "spvtools_val_fuzzer.cpp", @@ -142,6 +150,14 @@ if (!build_with_chromium || use_fuzzing_engine) { seed_corpus = "corpora/spv" } + fuzzer_test("spvtools_opt_vulkantowebgpu_fuzzer") { + sources = [] + deps = [ + ":spvtools_opt_vulkantowebgpu_fuzzer_src", + ] + seed_corpus = "corpora/spv" + } + fuzzer_test("spvtools_val_fuzzer") { sources = [] deps = [ diff --git a/test/fuzzers/spvtools_opt_vulkantowebgpu_fuzzer.cpp b/test/fuzzers/spvtools_opt_vulkantowebgpu_fuzzer.cpp new file mode 100644 index 00000000..0b2ecc32 --- /dev/null +++ b/test/fuzzers/spvtools_opt_vulkantowebgpu_fuzzer.cpp @@ -0,0 +1,38 @@ +// Copyright (c) 2019 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include <cstdint> +#include <vector> + +#include "spirv-tools/optimizer.hpp" + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + spvtools::Optimizer optimizer(SPV_ENV_WEBGPU_0); + optimizer.SetMessageConsumer([](spv_message_level_t, const char*, + const spv_position_t&, const char*) {}); + + std::vector<uint32_t> input; + input.resize(size >> 2); + + size_t count = 0; + for (size_t i = 0; (i + 3) < size; i += 4) { + input[count++] = data[i] | (data[i + 1] << 8) | (data[i + 2] << 16) | + (data[i + 3]) << 24; + } + + optimizer.RegisterVulkanToWebGPUPasses(); + optimizer.Run(input.data(), input.size(), &input); + + return 0; +} |