master
ブランチ master
VulkanExample / VulkanExample / shader / slang.cc
1.4 KB、38行 生 Blame 履歴
1#ifdef USING_SLANG
2#include <shader/slang.hh>
3#include <util/file.hh>
4
5Shaders::Shaders(vk::Device *device) : m_Device(device) {
6 auto shader = readFile("slang.spv");
7
8 vk::ShaderModuleCreateInfo info = {};
9 info.codeSize = shader.size();
10 info.pCode = reinterpret_cast<const uint32_t *>(shader.data());
11 m_ShaderModule = m_Device->createShaderModule(info);
12
13 vk::PipelineShaderStageCreateInfo vertShaderStageInfo = {};
14 vertShaderStageInfo.stage = vk::ShaderStageFlagBits::eVertex;
15 vertShaderStageInfo.module = m_ShaderModule;
16 vertShaderStageInfo.pName = "vertMain";
17
18 vk::PipelineShaderStageCreateInfo fragShaderStageInfo = {};
19 fragShaderStageInfo.stage = vk::ShaderStageFlagBits::eFragment;
20 fragShaderStageInfo.module = m_ShaderModule;
21 fragShaderStageInfo.pName = "fragMain";
22
23 m_ShaderStages.emplace_back(vertShaderStageInfo);
24 m_ShaderStages.emplace_back(fragShaderStageInfo);
25
26 m_BindingDescription = Vertex::getBindingDescription();
27 m_AttributeDescriptions = Vertex::getAttributeDescriptions();
28
29 m_VertInput.vertexBindingDescriptionCount = 1;
30 m_VertInput.pVertexBindingDescriptions = &m_BindingDescription;
31 m_VertInput.vertexAttributeDescriptionCount = static_cast<uint32_t>(m_AttributeDescriptions.size());
32 m_VertInput.pVertexAttributeDescriptions = m_AttributeDescriptions.data();
33}
34
35void Shaders::Finalize() {
36 if (m_ShaderModule) m_Device->destroyShaderModule(m_ShaderModule);
37}
38#endif // USING_SLANG