blob: 4416c3120b5298c4640d03ff1315429ce285454c [file] [log] [blame]
// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// DEPRECATED!! (ES-194) Avoid using in new code.
#ifndef SRC_UI_LIB_ESCHER_IMPL_GLSL_COMPILER_H_
#define SRC_UI_LIB_ESCHER_IMPL_GLSL_COMPILER_H_
#include <future>
#include <vector>
#include <vulkan/vulkan.hpp>
namespace escher {
namespace impl {
typedef std::vector<uint32_t> SpirvData;
// Wraps the reference GLSL compiler provided by Khronos.
// TODO: GLSL standard library functions are currently not available.
class GlslToSpirvCompiler {
public:
GlslToSpirvCompiler();
~GlslToSpirvCompiler();
// Compile and link the provided source code snippets into a single SPIR-V
// binary, which is returned as a string. |preamble| and |entry_point| may be
// empty strings. If an error is encountered during compilation, an empty
// string is returned.
std::future<SpirvData> Compile(vk::ShaderStageFlagBits stage,
std::vector<std::string> glsl_source_code, std::string preamble,
std::string entry_point);
private:
// Same as Compile(), but completes synchronously.
SpirvData SynchronousCompile(vk::ShaderStageFlagBits stage,
std::vector<std::string> glsl_source_code, std::string preamble,
std::string entry_point);
// Helper for SynchronousCompile.
SpirvData SynchronousCompileImpl(vk::ShaderStageFlagBits stage,
std::vector<std::string> glsl_source_code, std::string preamble,
std::string entry_point);
std::atomic<uint32_t> active_compile_count_;
};
} // namespace impl
} // namespace escher
#endif // SRC_UI_LIB_ESCHER_IMPL_GLSL_COMPILER_H_