blob: 803f715aa6abd1603b6dea16319118b732c2d277 [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.
#ifndef LIB_ESCHER_ESCHER_PROCESS_INIT_H_
#define LIB_ESCHER_ESCHER_PROCESS_INIT_H_
namespace escher {
// Escher currently incorporates the Khronos GLSL reference compiler ("glslang")
// that is included in the Vulkan SDK. This codebase requires that the client
// call glslang::InitializeProcess() before using any of its functionality, and
// glslang::FinalizeProcess() when finished.
//
// Some Escher clients may wish to directly use the glslang framework; in order
// to not conflict with these use cases, Escher requires clients to also call
// these two functions, before the first Escher instance is created, and after
// the last instance is destroyed.
//
// For clients that do not glslang framework, Escher provides the following
// two wrapper functions so that the client does not need to include the glslang
// headers.
//
// This is admittedly clumsy. In the long term, Escher will avoid initializing
// any per-process or per-thread state that may conflict with other client code;
// it will be enough to simply create and destroy Escher instances.
void GlslangInitializeProcess();
void GlslangFinalizeProcess();
} // namespace escher
#endif // LIB_ESCHER_ESCHER_PROCESS_INIT_H_