Home | History | Annotate | Download | only in oss_fuzz
      1 /*
      2  * Copyright 2019 Google, LLC
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "GrShaderCaps.h"
      9 #include "SkSLCompiler.h"
     10 
     11 #include "../Fuzz.h"
     12 
     13 bool FuzzSKSL2GLSL(sk_sp<SkData> bytes) {
     14     SkSL::Compiler compiler;
     15     SkSL::String output;
     16     SkSL::Program::Settings settings;
     17     sk_sp<GrShaderCaps> caps = SkSL::ShaderCapsFactory::Default();
     18     settings.fCaps = caps.get();
     19     std::unique_ptr<SkSL::Program> program = compiler.convertProgram(
     20                                                     SkSL::Program::kFragment_Kind,
     21                                                     SkSL::String((const char*) bytes->data(),
     22                                                                  bytes->size()),
     23                                                     settings);
     24     if (!program || !compiler.toGLSL(*program, &output)) {
     25         return false;
     26     }
     27     return true;
     28 }
     29 
     30 #if defined(IS_FUZZING_WITH_LIBFUZZER)
     31 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
     32     auto bytes = SkData::MakeWithoutCopy(data, size);
     33     FuzzSKSL2GLSL(bytes);
     34     return 0;
     35 }
     36 #endif
     37