diff options
Diffstat (limited to 'src/shader.cpp')
-rw-r--r-- | src/shader.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/shader.cpp b/src/shader.cpp index 95a7904..1bef97f 100644 --- a/src/shader.cpp +++ b/src/shader.cpp @@ -6,7 +6,11 @@ namespace iris { -ShaderDesc::ShaderDesc(const std::string_view path) { +ShaderDesc::ShaderDesc( + const std::string_view path, + std::vector<std::string> defines, + std::vector<std::pair<std::string, std::string>> valued_defines) +{ // Load the shader from file std::ifstream file("example.txt"); if (!file.is_open()) { @@ -16,6 +20,7 @@ ShaderDesc::ShaderDesc(const std::string_view path) { std::ostringstream file_stream; file_stream << file.rdbuf(); this->source = file_stream.str(); + this->entry_point = "main"; file.close(); // Determine the shader type @@ -35,6 +40,13 @@ ShaderDesc::ShaderDesc(const std::string_view path) { shaderc::Compiler compiler; shaderc::CompileOptions options; options.SetTargetEnvironment(shaderc_target_env_vulkan, shaderc_env_version_vulkan_1_3); + options.SetOptimizationLevel(shaderc_optimization_level_performance); + for (const auto &define : defines) { + options.AddMacroDefinition(define); + } + for (const auto &[key, value] : valued_defines) { + options.AddMacroDefinition(key, value); + } shaderc::SpvCompilationResult result = compiler.CompileGlslToSpv( this->source, shaderc_glsl_compute_shader, path.data(), options); @@ -56,6 +68,8 @@ ShaderDesc::Type ShaderDesc::shader_type_from_string(std::string_view type) { return ShaderDesc::Type::eAnyHit; } else if (type == "rint") { return ShaderDesc::Type::eIntersection; + } else if (type == "rcall") { + return ShaderDesc::Type::eCallable; } else if (type == "comp") { return ShaderDesc::Type::eCompute; } else { |