blob: d9a4a78cd4da6ba6af51ae48705ce187fc9ae428 [file] [log] [blame]
/*
* Copyright 2016 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SKSL_SPIRVCODEGENERATOR
#define SKSL_SPIRVCODEGENERATOR
#include "include/core/SkSpan.h"
#include "src/sksl/codegen/SkSLNativeShader.h"
#include <cstdint>
#include <vector>
namespace SkSL {
class ErrorReporter;
class OutputStream;
struct Program;
struct ShaderCaps;
using ValidateSPIRVProc = bool (*)(ErrorReporter&, SkSpan<const uint32_t>);
/**
* Converts a Program into a SPIR-V binary. Prefer the std::vector<uint32_t> variant bacause the
* OutputStream variant incurs an additional copy.
*/
bool ToSPIRV(Program& program, const ShaderCaps* caps, OutputStream& out, ValidateSPIRVProc = nullptr);
bool ToSPIRV(Program& program,
const ShaderCaps* caps,
std::vector<uint32_t>* out,
ValidateSPIRVProc = nullptr);
// This explicit overload is used by SkSLToBackend.
inline bool ToSPIRV(Program& program, const ShaderCaps* caps, NativeShader* out) {
return ToSPIRV(program, caps, &out->fBinary, nullptr);
}
} // namespace SkSL
#endif