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