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