summaryrefslogtreecommitdiff
path: root/src/shader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/shader.cpp')
-rw-r--r--src/shader.cpp16
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 {