1 //
2 // Copyright 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 #ifdef ANGLE_ENABLE_METAL
24 # include "compiler/translator/TranslatorMetal.h"
25 #endif // ANGLE_ENABLE_METAL
26
27 #include "compiler/translator/util.h"
28
29 namespace sh
30 {
31
32 //
33 // This function must be provided to create the actual
34 // compile object used by higher level code. It returns
35 // a subclass of TCompiler.
36 //
ConstructCompiler(sh::GLenum type,ShShaderSpec spec,ShShaderOutput output)37 TCompiler *ConstructCompiler(sh::GLenum type, ShShaderSpec spec, ShShaderOutput output)
38 {
39 #ifdef ANGLE_ENABLE_ESSL
40 if (IsOutputESSL(output))
41 {
42 return new TranslatorESSL(type, spec);
43 }
44 #endif // ANGLE_ENABLE_ESSL
45
46 #ifdef ANGLE_ENABLE_GLSL
47 if (IsOutputGLSL(output))
48 {
49 return new TranslatorGLSL(type, spec, output);
50 }
51 #endif // ANGLE_ENABLE_GLSL
52
53 #ifdef ANGLE_ENABLE_HLSL
54 if (IsOutputHLSL(output))
55 {
56 return new TranslatorHLSL(type, spec, output);
57 }
58 #endif // ANGLE_ENABLE_HLSL
59
60 #ifdef ANGLE_ENABLE_VULKAN
61 if (IsOutputVulkan(output))
62 {
63 return new TranslatorVulkan(type, spec);
64 }
65 #endif // ANGLE_ENABLE_VULKAN
66
67 #ifdef ANGLE_ENABLE_METAL
68 if (IsOutputMetal(output))
69 {
70 return new TranslatorMetal(type, spec);
71 }
72 #endif // ANGLE_ENABLE_METAL
73
74 // Unsupported compiler or unknown format. Return nullptr per the sh::ConstructCompiler API.
75 return nullptr;
76 }
77
78 //
79 // Delete the compiler made by ConstructCompiler
80 //
DeleteCompiler(TCompiler * compiler)81 void DeleteCompiler(TCompiler *compiler)
82 {
83 SafeDelete(compiler);
84 }
85
86 } // namespace sh
87