SpiecsEngine
 
Loading...
Searching...
No Matches
ShaderHelper.cpp
Go to the documentation of this file.
1/**
2* @file ShaderHelper.cpp.
3* @brief The ShaderHelper Class Implementation.
4* @author Spices.
5*/
6
7#include "Pchheader.h"
8#include "ShaderHelper.h"
9
10namespace Spices {
11
12 std::string ShaderHelper::ToString(ShaderStage stage)
13 {
15
16 switch (stage)
17 {
18 case Spices::ShaderStage::vert:
19 return "vert";
20 case Spices::ShaderStage::geom:
21 return "geom";
22 case Spices::ShaderStage::tesc:
23 return "tesc";
24 case Spices::ShaderStage::tese:
25 return "tese";
26 case Spices::ShaderStage::frag:
27 return "frag";
28 case Spices::ShaderStage::task:
29 return "task";
30 case Spices::ShaderStage::mesh:
31 return "mesh";
32 case Spices::ShaderStage::rgen:
33 return "rgen";
34 case Spices::ShaderStage::rint:
35 return "rint";
36 case Spices::ShaderStage::rchit:
37 return "rchit";
38 case Spices::ShaderStage::rahit:
39 return "rahit";
40 case Spices::ShaderStage::rmiss:
41 return "rmiss";
42 case Spices::ShaderStage::comp:
43 return "comp";
44 case Spices::ShaderStage::glsl:
45 return "glsl";
46 default:
47 SPICES_CORE_WARN("Not supported shader stage")
48 return "none";
49 }
50 }
51
52 ShaderStage ShaderHelper::ToStage(std::string stage)
53 {
55
56 if (stage == "vert")
57 {
58 return ShaderStage::vert;
59 }
60 else if (stage == "geom")
61 {
62 return ShaderStage::geom;
63 }
64 else if (stage == "tesc")
65 {
66 return ShaderStage::tesc;
67 }
68 else if (stage == "tese")
69 {
70 return ShaderStage::tese;
71 }
72 else if (stage == "frag")
73 {
74 return ShaderStage::frag;
75 }
76 else if (stage == "task")
77 {
78 return ShaderStage::task;
79 }
80 else if (stage == "mesh")
81 {
82 return ShaderStage::mesh;
83 }
84 else if (stage == "rgen")
85 {
86 return ShaderStage::rgen;
87 }
88 else if (stage == "rint")
89 {
90 return ShaderStage::rint;
91 }
92 else if (stage == "rchit")
93 {
94 return ShaderStage::rchit;
95 }
96 else if (stage == "rahit")
97 {
98 return ShaderStage::rahit;
99 }
100 else if (stage == "rmiss")
101 {
102 return ShaderStage::rmiss;
103 }
104 else if (stage == "comp")
105 {
106 return ShaderStage::comp;
107 }
108 else if (stage == "glsl")
109 {
110 return ShaderStage::glsl;
111 }
112 else
113 {
114 SPICES_CORE_WARN("Not supported shader stage")
115 return ShaderStage::vert;
116 }
117 }
118
119 shaderc_shader_kind ShaderHelper::ToShaderCKind(ShaderStage stage)
120 {
122
123 switch (stage)
124 {
125 case Spices::ShaderStage::vert:
126 return shaderc_shader_kind::shaderc_vertex_shader;
127 case Spices::ShaderStage::geom:
128 return shaderc_shader_kind::shaderc_geometry_shader;
129 case Spices::ShaderStage::tesc:
130 return shaderc_shader_kind::shaderc_tess_control_shader;
131 case Spices::ShaderStage::tese:
132 return shaderc_shader_kind::shaderc_tess_evaluation_shader;
133 case Spices::ShaderStage::frag:
134 return shaderc_shader_kind::shaderc_fragment_shader;
135 case Spices::ShaderStage::task:
136 return shaderc_shader_kind::shaderc_task_shader;
137 case Spices::ShaderStage::mesh:
138 return shaderc_shader_kind::shaderc_mesh_shader;
139 case Spices::ShaderStage::rgen:
140 return shaderc_shader_kind::shaderc_raygen_shader;
141 case Spices::ShaderStage::rint:
142 return shaderc_shader_kind::shaderc_intersection_shader;
143 case Spices::ShaderStage::rchit:
144 return shaderc_shader_kind::shaderc_closesthit_shader;
145 case Spices::ShaderStage::rahit:
146 return shaderc_shader_kind::shaderc_anyhit_shader;
147 case Spices::ShaderStage::rmiss:
148 return shaderc_shader_kind::shaderc_miss_shader;
149 case Spices::ShaderStage::comp:
150 return shaderc_shader_kind::shaderc_compute_shader;
151 default:
152 SPICES_CORE_WARN("Not supported shader stage")
153 return shaderc_shader_kind::shaderc_glsl_infer_from_source;
154 }
155 }
156
157 VkShaderStageFlagBits ShaderHelper::ToFlagBits(ShaderStage stage)
158 {
160
161 switch (stage)
162 {
163 case Spices::ShaderStage::vert:
164 return VK_SHADER_STAGE_VERTEX_BIT;
165 case Spices::ShaderStage::geom:
166 return VK_SHADER_STAGE_GEOMETRY_BIT;
167 case Spices::ShaderStage::tesc:
168 return VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT;
169 case Spices::ShaderStage::tese:
170 return VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT;
171 case Spices::ShaderStage::frag:
172 return VK_SHADER_STAGE_FRAGMENT_BIT;
173 case Spices::ShaderStage::task:
174 return VK_SHADER_STAGE_TASK_BIT_EXT;
175 case Spices::ShaderStage::mesh:
176 return VK_SHADER_STAGE_MESH_BIT_EXT;
177 case Spices::ShaderStage::rgen:
178 return VK_SHADER_STAGE_RAYGEN_BIT_KHR;
179 case Spices::ShaderStage::rint:
180 return VK_SHADER_STAGE_INTERSECTION_BIT_KHR;
181 case Spices::ShaderStage::rchit:
182 return VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR;
183 case Spices::ShaderStage::rahit:
184 return VK_SHADER_STAGE_ANY_HIT_BIT_KHR;
185 case Spices::ShaderStage::rmiss:
186 return VK_SHADER_STAGE_MISS_BIT_KHR;
187 case Spices::ShaderStage::comp:
188 return VK_SHADER_STAGE_COMPUTE_BIT;
189 default:
190 SPICES_CORE_WARN("Not supported shader stage")
191 return VK_SHADER_STAGE_VERTEX_BIT;
192 }
193 }
194}
#define SPICES_PROFILE_ZONE
static std::string ToString(ShaderStage stage)
Convert ShaderStage to String.
static ShaderStage ToStage(std::string stage)
Convert String to ShaderStage.
ShaderHelper Class.
ShaderStage
enum of shader stage.