/* * 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/codegen/SkSLHLSLCodeGenerator.h" #include "include/private/base/SkDebug.h" #include "src/core/SkTraceEvent.h" #include "src/sksl/SkSLContext.h" // IWYU pragma: keep #include "src/sksl/SkSLErrorReporter.h" #include "src/sksl/SkSLOutputStream.h" #include "src/sksl/SkSLPosition.h" #include "src/sksl/codegen/SkSLSPIRVCodeGenerator.h" #include "src/sksl/codegen/SkSLSPIRVtoHLSL.h" #include "src/sksl/ir/SkSLProgram.h" #include #include #include namespace SkSL { bool ToHLSL(Program& program, const ShaderCaps* caps, OutputStream& out) { TRACE_EVENT0("skia.shaders", "SkSL::ToHLSL"); std::string hlsl; if (!ToHLSL(program, caps, &hlsl)) { return false; } out.writeString(hlsl); return true; } bool ToHLSL(Program& program, const ShaderCaps* caps, std::string* out) { std::string spirv; if (!ToSPIRV(program, caps, &spirv)) { return false; } if (!SPIRVtoHLSL(spirv, out)) { program.fContext->fErrors->error(Position(), "HLSL cross-compilation not enabled"); return false; } return true; } } // namespace SkSL