mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-18 01:15:39 +00:00
Convert fuzzer to generating configuration data
This is instead of consuming a portion of the input, so that the seed corpus of valid shaders can be more effective. BUG=tint:1098 Change-Id: If3696527c82c23b09edeea6ddd2a0f935e5e1ac7 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/63301 Auto-Submit: Ryan Harrison <rharrison@chromium.org> Commit-Queue: Ben Clayton <bclayton@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
committed by
Tint LUCI CQ
parent
28d6763ef8
commit
a617d0f0fc
@@ -12,6 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include "fuzzers/random_generator.h"
|
||||
#include "fuzzers/tint_common_fuzzer.h"
|
||||
#include "fuzzers/tint_init_fuzzer.h"
|
||||
|
||||
@@ -19,17 +20,17 @@ namespace tint {
|
||||
namespace fuzzers {
|
||||
|
||||
struct Config {
|
||||
Config(const uint8_t* data, size_t size) : reader(data, size) {}
|
||||
Reader reader;
|
||||
Config(const uint8_t* data, size_t size) : builder(data, size) {}
|
||||
DataBuilder builder;
|
||||
transform::Manager manager;
|
||||
transform::DataMap inputs;
|
||||
};
|
||||
|
||||
bool AddPlatformIndependentPasses(Config* config) {
|
||||
ExtractFirstIndexOffsetInputs(&config->reader, &config->inputs);
|
||||
ExtractBindingRemapperInputs(&config->reader, &config->inputs);
|
||||
ExtractSingleEntryPointInputs(&config->reader, &config->inputs);
|
||||
ExtractVertexPullingInputs(&config->reader, &config->inputs);
|
||||
void AddPlatformIndependentPasses(Config* config) {
|
||||
GenerateFirstIndexOffsetInputs(&config->builder, &config->inputs);
|
||||
GenerateBindingRemapperInputs(&config->builder, &config->inputs);
|
||||
GenerateSingleEntryPointInputs(&config->builder, &config->inputs);
|
||||
GenerateVertexPullingInputs(&config->builder, &config->inputs);
|
||||
|
||||
config->manager.Add<transform::Robustness>();
|
||||
config->manager.Add<transform::FirstIndexOffset>();
|
||||
@@ -37,69 +38,55 @@ bool AddPlatformIndependentPasses(Config* config) {
|
||||
config->manager.Add<transform::Renamer>();
|
||||
config->manager.Add<tint::transform::SingleEntryPoint>();
|
||||
config->manager.Add<tint::transform::VertexPulling>();
|
||||
|
||||
return !config->reader.failed();
|
||||
}
|
||||
|
||||
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
||||
{
|
||||
Config config(data, size);
|
||||
|
||||
if (!AddPlatformIndependentPasses(&config)) {
|
||||
return 0;
|
||||
}
|
||||
AddPlatformIndependentPasses(&config);
|
||||
|
||||
fuzzers::CommonFuzzer fuzzer(InputFormat::kWGSL, OutputFormat::kSpv);
|
||||
fuzzer.SetTransformManager(&(config.manager), std::move(config.inputs));
|
||||
fuzzer.SetDumpInput(GetCliParams().dump_input);
|
||||
|
||||
fuzzer.Run(config.reader.data(), config.reader.size());
|
||||
fuzzer.Run(data, size);
|
||||
}
|
||||
|
||||
#if TINT_BUILD_HLSL_WRITER
|
||||
{
|
||||
Config config(data, size);
|
||||
|
||||
if (!AddPlatformIndependentPasses(&config)) {
|
||||
return 0;
|
||||
}
|
||||
AddPlatformIndependentPasses(&config);
|
||||
|
||||
fuzzers::CommonFuzzer fuzzer(InputFormat::kWGSL, OutputFormat::kHLSL);
|
||||
fuzzer.SetTransformManager(&config.manager, std::move(config.inputs));
|
||||
fuzzer.SetDumpInput(GetCliParams().dump_input);
|
||||
|
||||
fuzzer.Run(config.reader.data(), config.reader.size());
|
||||
fuzzer.Run(data, size);
|
||||
}
|
||||
#endif // TINT_BUILD_HLSL_WRITER
|
||||
|
||||
#if TINT_BUILD_MSL_WRITER
|
||||
{
|
||||
Config config(data, size);
|
||||
|
||||
if (!AddPlatformIndependentPasses(&config)) {
|
||||
return 0;
|
||||
}
|
||||
AddPlatformIndependentPasses(&config);
|
||||
|
||||
fuzzers::CommonFuzzer fuzzer(InputFormat::kWGSL, OutputFormat::kMSL);
|
||||
fuzzer.SetTransformManager(&config.manager, std::move(config.inputs));
|
||||
fuzzer.SetDumpInput(GetCliParams().dump_input);
|
||||
|
||||
fuzzer.Run(config.reader.data(), config.reader.size());
|
||||
fuzzer.Run(data, size);
|
||||
}
|
||||
#endif // TINT_BUILD_MSL_WRITER
|
||||
#if TINT_BUILD_SPV_WRITER
|
||||
{
|
||||
Config config(data, size);
|
||||
|
||||
if (!AddPlatformIndependentPasses(&config)) {
|
||||
return 0;
|
||||
}
|
||||
AddPlatformIndependentPasses(&config);
|
||||
|
||||
fuzzers::CommonFuzzer fuzzer(InputFormat::kWGSL, OutputFormat::kSpv);
|
||||
fuzzer.SetTransformManager(&config.manager, std::move(config.inputs));
|
||||
fuzzer.SetDumpInput(GetCliParams().dump_input);
|
||||
|
||||
fuzzer.Run(config.reader.data(), config.reader.size());
|
||||
fuzzer.Run(data, size);
|
||||
}
|
||||
#endif // TINT_BUILD_SPV_WRITER
|
||||
|
||||
|
||||
Reference in New Issue
Block a user