1/*
2 * Targets.h
3 *
4 * This file is part of the XShaderCompiler project (Copyright (c) 2014-2017 by Lukas Hermanns)
5 * See "LICENSE.txt" for license information.
6 */
7
8#ifndef XSC_TARGETS_H
9#define XSC_TARGETS_H
10
11
12#include "Export.h"
13#include <string>
14#include <map>
15
16
17namespace Xsc
18{
19
20
21/* ===== Public enumerations ===== */
22
23//! Shader target enumeration.
24enum class ShaderTarget
25{
26 Undefined, //!< Undefined shader target.
27
28 VertexShader, //!< Vertex shader.
29 TessellationControlShader, //!< Tessellation-control (also Hull-) shader.
30 TessellationEvaluationShader, //!< Tessellation-evaluation (also Domain-) shader.
31 GeometryShader, //!< Geometry shader.
32 FragmentShader, //!< Fragment (also Pixel-) shader.
33 ComputeShader, //!< Compute shader.
34};
35
36//! Input shader version enumeration.
37enum class InputShaderVersion
38{
39 Cg = 2, //!< Cg (C for graphics) is a slightly extended HLSL3.
40
41 HLSL3 = 3, //!< HLSL Shader Model 3.0 (DirectX 9).
42 HLSL4 = 4, //!< HLSL Shader Model 4.0 (DirectX 10).
43 HLSL5 = 5, //!< HLSL Shader Model 5.0 (DirectX 11).
44 HLSL6 = 6, //!< HLSL Shader Model 6.0 (DirectX 12).
45
46 GLSL = 0x0000ffff, //!< GLSL (OpenGL).
47 ESSL = 0x0001ffff, //!< GLSL (OpenGL ES).
48 VKSL = 0x0002ffff, //!< GLSL (Vulkan).
49};
50
51//! Output shader version enumeration.
52enum class OutputShaderVersion
53{
54 GLSL110 = 110, //!< GLSL 1.10 (OpenGL 2.0).
55 GLSL120 = 120, //!< GLSL 1.20 (OpenGL 2.1).
56 GLSL130 = 130, //!< GLSL 1.30 (OpenGL 3.0).
57 GLSL140 = 140, //!< GLSL 1.40 (OpenGL 3.1).
58 GLSL150 = 150, //!< GLSL 1.50 (OpenGL 3.2).
59 GLSL330 = 330, //!< GLSL 3.30 (OpenGL 3.3).
60 GLSL400 = 400, //!< GLSL 4.00 (OpenGL 4.0).
61 GLSL410 = 410, //!< GLSL 4.10 (OpenGL 4.1).
62 GLSL420 = 420, //!< GLSL 4.20 (OpenGL 4.2).
63 GLSL430 = 430, //!< GLSL 4.30 (OpenGL 4.3).
64 GLSL440 = 440, //!< GLSL 4.40 (OpenGL 4.4).
65 GLSL450 = 450, //!< GLSL 4.50 (OpenGL 4.5).
66 GLSL = 0x0000ffff, //!< Auto-detect minimal required GLSL version (for OpenGL 2+).
67
68 ESSL100 = (0x00010000 + 100), //!< ESSL 1.00 (OpenGL ES 2.0). \note Currently not supported!
69 ESSL300 = (0x00010000 + 300), //!< ESSL 3.00 (OpenGL ES 3.0). \note Currently not supported!
70 ESSL310 = (0x00010000 + 310), //!< ESSL 3.10 (OpenGL ES 3.1). \note Currently not supported!
71 ESSL320 = (0x00010000 + 320), //!< ESSL 3.20 (OpenGL ES 3.2). \note Currently not supported!
72 ESSL = 0x0001ffff, //!< Auto-detect minimum required ESSL version (for OpenGL ES 2+). \note Currently not supported!
73
74 VKSL450 = (0x00020000 + 450), //!< VKSL 4.50 (Vulkan 1.0).
75 VKSL = 0x0002ffff, //!< Auto-detect minimum required VKSL version (for Vulkan/SPIR-V).
76};
77
78//! Intermediate language enumeration.
79enum class IntermediateLanguage
80{
81 SPIRV, //!< SPIR-V.
82};
83
84
85/* ===== Public functions ===== */
86
87//! Returns the specified shader target as string.
88XSC_EXPORT std::string ToString(const ShaderTarget target);
89
90//! Returns the specified shader input version as string.
91XSC_EXPORT std::string ToString(const InputShaderVersion shaderVersion);
92
93//! Returns the specified shader output version as string.
94XSC_EXPORT std::string ToString(const OutputShaderVersion shaderVersion);
95
96//! Returns the specified intermediate language as string.
97XSC_EXPORT std::string ToString(const IntermediateLanguage language);
98
99//! Returns true if the shader input version specifies HLSL (for DirectX) or Cg (handled as dialect or HLSL).
100XSC_EXPORT bool IsLanguageHLSL(const InputShaderVersion shaderVersion);
101
102//! Returns true if the shader input version specifies GLSL (for OpenGL, OpenGL ES, and Vulkan).
103XSC_EXPORT bool IsLanguageGLSL(const InputShaderVersion shaderVersion);
104
105//! Returns true if the shader output version specifies GLSL (for OpenGL 2+).
106XSC_EXPORT bool IsLanguageGLSL(const OutputShaderVersion shaderVersion);
107
108//! Returns true if the shader output version specifies ESSL (for OpenGL ES 2+).
109XSC_EXPORT bool IsLanguageESSL(const OutputShaderVersion shaderVersion);
110
111//! Returns true if the shader output version specifies VKSL (for Vulkan).
112XSC_EXPORT bool IsLanguageVKSL(const OutputShaderVersion shaderVersion);
113
114//! Returns the enumeration of all supported GLSL extensions as a map of extension name and version number.
115XSC_EXPORT const std::map<std::string, int>& GetGLSLExtensionEnumeration();
116
117
118} // /namespace Xsc
119
120
121#endif
122
123
124
125// ================================================================================