blob: e972deb089b199d2e967bfe9502baf91ece6858b [file] [log] [blame]
/*
* 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 <cstdint>
#include <memory>
#include <type_traits>
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