2
3
4
5
10#include "Core/Library/FileLibrary.h"
16 const std::string& shaderName ,
17 const std::string& shaderStage
25
26
30
31
37 SPICES_CORE_ERROR(
"File is not exist.");
41
42
45 uint64_t fileSize = 0;
49
50
51 std::vector<
char> shaderChar;
52 shaderChar.resize(fileSize);
53 FileLibrary::FileLibrary_Read_all_bytes(&fileHandle, shaderChar.data(), &fileSize);
56
57
58 VkShaderModuleCreateInfo createInfo{};
59 createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
60 createInfo.codeSize = fileSize;
61 createInfo.pCode =
reinterpret_cast<
const uint32_t*>(shaderChar.data());
64
65
66 VK_CHECK(vkCreateShaderModule(vulkanState.m_Device, &createInfo,
nullptr, &m_ShaderModule))
67 DEBUGUTILS_SETOBJECTNAME(VK_OBJECT_TYPE_SHADER_MODULE,
reinterpret_cast<uint64_t>(m_ShaderModule), m_VulkanState.m_Device, shaderName)
69 FileLibrary::FileLibrary_Close(&fileHandle);
72
73
74 NSIGHTAFTERMATH_GPUCRASHTRACKER_ADDSHADERBINARY(filePath.c_str())
75 NSIGHTAFTERMATH_GPUCRASHTRACKER_ADDSHADERBINARY_WITHDEBUGINFO(filePath.c_str(), filePath.c_str())
80 const std::string& shaderName ,
82 const std::vector<uint8_t>& spirv ,
83 const std::string& fullPath
91
92
93 VkShaderModuleCreateInfo createInfo{};
94 createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
95 createInfo.codeSize = spirv.size();
96 createInfo.pCode =
reinterpret_cast<
const uint32_t*>(spirv.data());
99
100
101 VK_CHECK(vkCreateShaderModule(vulkanState.m_Device, &createInfo,
nullptr, &m_ShaderModule))
102 DEBUGUTILS_SETOBJECTNAME(VK_OBJECT_TYPE_SHADER_MODULE,
reinterpret_cast<uint64_t>(m_ShaderModule), m_VulkanState.m_Device, shaderName)
105
106
107 NSIGHTAFTERMATH_GPUCRASHTRACKER_ADDSHADERSOURCE(spirv)
108 NSIGHTAFTERMATH_GPUCRASHTRACKER_ADDSHADERSOURCE_WITHDEBUGINFO(spirv, spirv)
116
117
118 vkDestroyShaderModule(m_VulkanState.m_Device, m_ShaderModule,
nullptr);
123 VkPipelineShaderStageCreateInfo shaderStages{};
125 shaderStages.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
126 shaderStages.module = m_ShaderModule;
127 shaderStages.pName =
"main";
128 shaderStages.flags = 0;
129 shaderStages.pNext =
nullptr;
130 shaderStages.pSpecializationInfo =
nullptr;
131 shaderStages.stage = ShaderHelper::ToFlagBits(m_ShaderStage);
141
142
143 std::stringstream ss;
144 ss << SPICES_ENGINE_ASSETS_PATH <<
"Shaders/spv/Shader." << name <<
"." << shaderType <<
".spv";
#define SPICES_PROFILE_ZONE
#define VK_CHECK(expr)
Vulkan Check macro. Verify Vulkan API Effectiveness.
static bool FileLibrary_Size(const FileHandle *handle, uint64_t *out_size)
Calculate The file size.
static bool FileLibrary_Open(const char *path, FileModes mode, bool binary, FileHandle *out_handle)
Open the file using given string.
static bool FileLibrary_Exists(const char *path)
Determine whether the given string is existing a file.
File Static Function Library.
static ShaderStage ToStage(std::string stage)
Convert String to ShaderStage.
VulkanObject(VulkanState &vulkanState)
Constructor Function. Init member variables.
VulkanObject Class. This class defines the basic behaves of VulkanObject. When we create an new Vulka...
VkPipelineShaderStageCreateInfo GetShaderStageCreateInfo() const
virtual ~VulkanShaderModule() override
Destructor Function.
ShaderStage m_ShaderStage
std::string GetShaderPath(const std::string &name, const std::string &shaderType)
Get shader path string.
VulkanShaderModule(VulkanState &vulkanState, const std::string &shaderName, const std::string &shaderStage)
Constructor Function. Create VkShaderModule.
VulkanShaderModule(VulkanState &vulkanState, const std::string &shaderName, const ShaderStage &shaderStage, const std::vector< uint8_t > &spirv, const std::string &fullPath)
Constructor Function. Create VkShaderModule.
This Class is a Wrapper of VkShaderModule.
ShaderStage
enum of shader stage.
@ FILE_MODE_READ
model : read
bool is_valid
Is this handle Valid.
This Struct is FILE* handle pointer Wrapper.
This struct contains all Vulkan object in used global.