summaryrefslogtreecommitdiff
path: root/src/shader.cpp
diff options
context:
space:
mode:
authorChuyan Zhang <chuyan@ucsb.edu>2024-10-10 16:29:06 -0700
committerChuyan Zhang <chuyan@ucsb.edu>2024-10-10 16:29:06 -0700
commitba27f3c22e79b91a2573b7efd00c5a3bbdb96dbc (patch)
treeea6244cc24bccb891e45fe1413b66f3ceeba398d /src/shader.cpp
parentd25c392cec57e8c561899bf75668da79c4e67aed (diff)
downloadiris-ba27f3c22e79b91a2573b7efd00c5a3bbdb96dbc.tar.gz
iris-ba27f3c22e79b91a2573b7efd00c5a3bbdb96dbc.zip
Update shader changes
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 {