1//
2// Copyright (c) 2013 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7#ifdef ANGLE_ENABLE_ESSL
8# include "compiler/translator/TranslatorESSL.h"
9#endif // ANGLE_ENABLE_ESSL
10
11#ifdef ANGLE_ENABLE_GLSL
12# include "compiler/translator/TranslatorGLSL.h"
13#endif // ANGLE_ENABLE_GLSL
14
15#ifdef ANGLE_ENABLE_HLSL
16# include "compiler/translator/TranslatorHLSL.h"
17#endif // ANGLE_ENABLE_HLSL
18
19#ifdef ANGLE_ENABLE_VULKAN
20# include "compiler/translator/TranslatorVulkan.h"
21#endif // ANGLE_ENABLE_VULKAN
22
23#include "compiler/translator/util.h"
24
25namespace sh
26{
27
28//
29// This function must be provided to create the actual
30// compile object used by higher level code. It returns
31// a subclass of TCompiler.
32//
33TCompiler *ConstructCompiler(sh::GLenum type, ShShaderSpec spec, ShShaderOutput output)
34{
35#ifdef ANGLE_ENABLE_ESSL
36 if (IsOutputESSL(output))
37 {
38 return new TranslatorESSL(type, spec);
39 }
40#endif // ANGLE_ENABLE_ESSL
41
42#ifdef ANGLE_ENABLE_GLSL
43 if (IsOutputGLSL(output))
44 {
45 return new TranslatorGLSL(type, spec, output);
46 }
47#endif // ANGLE_ENABLE_GLSL
48
49#ifdef ANGLE_ENABLE_HLSL
50 if (IsOutputHLSL(output))
51 {
52 return new TranslatorHLSL(type, spec, output);
53 }
54#endif // ANGLE_ENABLE_HLSL
55
56#ifdef ANGLE_ENABLE_VULKAN
57 if (IsOutputVulkan(output))
58 {
59 return new TranslatorVulkan(type, spec);
60 }
61#endif // ANGLE_ENABLE_VULKAN
62
63 // Unsupported compiler or unknown format. Return nullptr per the sh::ConstructCompiler API.
64 return nullptr;
65}
66
67//
68// Delete the compiler made by ConstructCompiler
69//
70void DeleteCompiler(TCompiler *compiler)
71{
72 SafeDelete(compiler);
73}
74
75} // namespace sh
76