152 bool create_from_spirv(
154 const
std::vector<uint32_t>& spirv_code,
155 vk::ShaderStageFlagBits stage,
156 const
std::
string& entry_point = "
main",
157 bool enable_reflection = true);
170 bool create_from_spirv_file(
172 const
std::
string& spirv_path,
173 vk::ShaderStageFlagBits stage,
174 const
std::
string& entry_point = "
main",
175 bool enable_reflection = true);
191 bool create_from_glsl(
193 const
std::
string& glsl_source,
194 vk::ShaderStageFlagBits stage,
195 const
std::
string& entry_point = "
main",
196 bool enable_reflection = true,
197 const
std::vector<
std::
string>& include_directories = {},
198 const std::unordered_map<std::string, std::string>& defines = {});
220 bool create_from_glsl_file(
222 const std::string& glsl_path,
223 std::optional<vk::ShaderStageFlagBits> stage = std::nullopt,
224 const std::string& entry_point =
"main",
225 bool enable_reflection =
true,
226 const std::vector<std::string>& include_directories = {},
227 const std::unordered_map<std::string, std::string>& defines = {});
236 void cleanup(vk::Device device);
242 [[nodiscard]]
bool is_valid()
const {
return m_module !=
nullptr; }
248 [[nodiscard]] vk::ShaderModule
get()
const {
return m_module; }
254 [[nodiscard]] vk::ShaderStageFlagBits
get_stage()
const {
return m_stage; }
271 [[nodiscard]] vk::PipelineShaderStageCreateInfo get_stage_create_info()
const;
289 [[nodiscard]]
const std::vector<uint32_t>&
get_spirv()
const {
return m_spirv_code; }
304 void set_specialization_constants(
const std::unordered_map<uint32_t, uint32_t>& constants);
318 [[nodiscard]]
Stage get_stage_type()
const;
326 return m_vertex_input;
334 return !m_vertex_input.attributes.empty();
343 return m_fragment_output;
352 return m_push_constants;
362 return m_reflection.workgroup_size;
370 static std::optional<vk::ShaderStageFlagBits> detect_stage_from_extension(
const std::string& filepath);
373 vk::ShaderModule m_module =
nullptr;
374 vk::ShaderStageFlagBits m_stage = vk::ShaderStageFlagBits::eCompute;
375 std::string m_entry_point =
"main";
380 bool m_preserve_spirv {};
399 bool reflect_spirv(
const std::vector<uint32_t>& spirv_code);
409 std::vector<uint32_t> compile_glsl_to_spirv(
410 const std::string& glsl_source,
411 vk::ShaderStageFlagBits stage,
412 const std::vector<std::string>& include_directories,
413 const std::unordered_map<std::string, std::string>& defines);
420 static std::vector<uint32_t> read_spirv_file(
const std::string& filepath);
427 static std::string read_text_file(
const std::string& filepath);
433 void update_specialization_info();