/* * Copyright 2020 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "src/sksl/SkSLCompiler.h" #include "tests/Test.h" // Note that the optimizer will aggressively kill dead code and substitute constants in place of // variables, so we have to jump through a few hoops to ensure that the code in these tests has the // necessary side-effects to remain live. In some cases we rely on the optimizer not (yet) being // smart enough to optimize around certain constructs; as the optimizer gets smarter it will // undoubtedly end up breaking some of these tests. That is a good thing, as long as the new code is // equivalent! static void test(skiatest::Reporter* r, const SkSL::Program::Settings& settings, const char* src, SkSL::Program::Inputs* inputs, SkSL::Program::Kind kind = SkSL::Program::kFragment_Kind) { SkSL::Compiler compiler; SkSL::String output; std::unique_ptr program = compiler.convertProgram(kind, SkSL::String(src), settings); if (!program) { SkDebugf("Unexpected error compiling %s\n%s", src, compiler.errorText().c_str()); REPORTER_ASSERT(r, program); } else { *inputs = program->fInputs; REPORTER_ASSERT(r, compiler.toGLSL(*program, &output)); REPORTER_ASSERT(r, output != ""); //SkDebugf("GLSL output:\n\n%s", output.c_str()); } } static void test(skiatest::Reporter* r, const GrShaderCaps& caps, const char* src, SkSL::Program::Kind kind = SkSL::Program::kFragment_Kind) { SkSL::Program::Settings settings; settings.fCaps = ∩︀ SkSL::Program::Inputs inputs; test(r, settings, src, &inputs, kind); } DEF_TEST(SkSLGLSLTestbed, r) { // Add in your SkSL here. test(r, *SkSL::ShaderCapsFactory::Default(), R"__SkSL__( void main() { sk_FragColor = half4(0); } )__SkSL__"); }