Add helper for loading a shader module from disk in tests

This commit is contained in:
baldurk
2024-09-09 14:40:37 +01:00
parent 1ca4b70bf9
commit 178b733001
2 changed files with 39 additions and 0 deletions
+37
View File
@@ -921,6 +921,43 @@ void VulkanGraphicsTest::Present()
mainWindow->Present(queue);
}
VkPipelineShaderStageCreateInfo VulkanGraphicsTest::LoadShaderModule(const std::string &filename,
ShaderStage stage,
const char *entry_point)
{
VkShaderModule ret = VK_NULL_HANDLE;
std::vector<uint32_t> spirv;
FILE *f = fopen(filename.c_str(), "rb");
if(f)
{
fseek(f, 0, SEEK_END);
spirv.resize(ftell(f) / sizeof(uint32_t));
fseek(f, 0, SEEK_SET);
fread(spirv.data(), sizeof(uint32_t), spirv.size(), f);
fclose(f);
}
if(spirv.empty())
return {};
CHECK_VKR(vkCreateShaderModule(device, vkh::ShaderModuleCreateInfo(spirv), NULL, &ret));
shaders.push_back(ret);
VkShaderStageFlagBits vkstage[] = {
VK_SHADER_STAGE_VERTEX_BIT,
VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
VK_SHADER_STAGE_GEOMETRY_BIT,
VK_SHADER_STAGE_FRAGMENT_BIT,
VK_SHADER_STAGE_COMPUTE_BIT,
};
return vkh::PipelineShaderStageCreateInfo(ret, vkstage[(int)stage], entry_point);
}
VkPipelineShaderStageCreateInfo VulkanGraphicsTest::CompileShaderModule(
const std::string &source_text, ShaderLang lang, ShaderStage stage, const char *entry_point,
const std::map<std::string, std::string> &macros, SPIRVTarget target)
+2
View File
@@ -217,6 +217,8 @@ struct VulkanGraphicsTest : public GraphicsTest
void SubmitAndPresent(const std::vector<VkCommandBuffer> &cmds);
void Present();
VkPipelineShaderStageCreateInfo LoadShaderModule(const std::string &filename, ShaderStage stage,
const char *entry_point = "main");
VkPipelineShaderStageCreateInfo CompileShaderModule(
const std::string &source_text, ShaderLang lang, ShaderStage stage,
const char *entry_point = "main", const std::map<std::string, std::string> &macros = {},