From cb7c9b8b492abaf72de3cef23d0f801cd9313ad0 Mon Sep 17 00:00:00 2001 From: Noah Santschi-Cooney Date: Fri, 25 Mar 2022 01:30:48 +0000 Subject: [PATCH] (probably for AMD) enable 'GL_GOOGLE_cpp_style_line_directive' in preamble --- server/src/merge_views.rs | 60 ++++++++++++++++++++++++++++-- server/testdata/01/final.fsh.merge | 2 + server/testdata/02/final.fsh.merge | 2 + server/testdata/03/final.fsh.merge | 2 + server/testdata/04/final.fsh.merge | 2 + server/testdata/05/final.fsh.merge | 2 + 6 files changed, 67 insertions(+), 3 deletions(-) diff --git a/server/src/merge_views.rs b/server/src/merge_views.rs index 5986a84..e1f6f4a 100644 --- a/server/src/merge_views.rs +++ b/server/src/merge_views.rs @@ -34,8 +34,20 @@ pub fn generate_merge_list<'a>(nodes: &'a [FilialTuple], sources: &'a HashMap::new(); @@ -53,8 +65,8 @@ pub fn generate_merge_list<'a>(nodes: &'a [FilialTuple], sources: &'a HashMap (usize, usize) { (char_for_line, char_following_line) } +fn find_version_offset(source: &str) -> usize { + source + .lines() + .enumerate() + .find(|(_, line)| line.starts_with("#version ")) + .map_or(0, |(i, _)| i) +} + +fn add_preamble<'a>( + version_line_offset: usize, version_char_offset: usize, path: &str, source: &'a str, merge_list: &mut LinkedList<&'a str>, + extra_lines: &mut Vec, +) { + // TODO: Optifine #define preabmle + merge_list.push_back(&source[..version_char_offset]); + let google_line_directive = format!( + "#extension GL_GOOGLE_cpp_style_line_directive : enable\n#line {} \"{}\"\n", + // +2 because 0 indexed but #line is 1 indexed and references the *following* line + version_line_offset + 2, + path, + ); + extra_lines.push(google_line_directive); + unsafe_get_and_insert(merge_list, extra_lines); +} + fn add_opening_line_directive(path: &Path, merge_list: &mut LinkedList<&str>, extra_lines: &mut Vec) { let line_directive = format!("#line 1 \"{}\"\n", path.to_str().unwrap().replace('\\', "\\\\")); extra_lines.push(line_directive); @@ -242,6 +278,11 @@ mod merge_view_test { let merge_file = tmp_path.join("shaders").join("final.fsh.merge"); let mut truth = fs::read_to_string(merge_file).unwrap(); + truth = truth.replacen( + "!!", + &tmp_path.join("shaders").join("final.fsh").to_str().unwrap().replace('\\', "\\\\"), + 1, + ); truth = truth.replacen( "!!", &tmp_path.join("shaders").join("common.glsl").to_str().unwrap().replace('\\', "\\\\"), @@ -306,6 +347,12 @@ mod merge_view_test { let mut truth = fs::read_to_string(merge_file).unwrap(); + truth = truth.replacen( + "!!", + &tmp_path.join("shaders").join("final.fsh").to_str().unwrap().replace('\\', "\\\\"), + 1, + ); + for file in &["sample.glsl", "burger.glsl", "sample.glsl", "test.glsl", "sample.glsl"] { let path = tmp_path.clone(); truth = truth.replacen( @@ -380,6 +427,12 @@ mod merge_view_test { let mut truth = fs::read_to_string(merge_file).unwrap(); + truth = truth.replacen( + "!!", + &tmp_path.join("shaders").join("final.fsh").to_str().unwrap().replace('\\', "\\\\"), + 1, + ); + for file in &["sample.glsl", "burger.glsl", "sample.glsl", "test.glsl", "sample.glsl"] { let path = tmp_path.clone(); truth = truth.replacen( @@ -464,6 +517,7 @@ mod merge_view_test { let mut truth = fs::read_to_string(merge_file).unwrap(); for file in &[ + PathBuf::new().join("final.fsh").to_str().unwrap(), PathBuf::new().join("utils").join("utilities.glsl").to_str().unwrap(), PathBuf::new().join("utils").join("stuff1.glsl").to_str().unwrap(), PathBuf::new().join("utils").join("utilities.glsl").to_str().unwrap(), diff --git a/server/testdata/01/final.fsh.merge b/server/testdata/01/final.fsh.merge index 609a754..f6cdd6e 100644 --- a/server/testdata/01/final.fsh.merge +++ b/server/testdata/01/final.fsh.merge @@ -1,4 +1,6 @@ #version 120 +#extension GL_GOOGLE_cpp_style_line_directive : enable +#line 2 "!!" #line 1 "!!" float test() { diff --git a/server/testdata/02/final.fsh.merge b/server/testdata/02/final.fsh.merge index 550f1d0..78c9367 100644 --- a/server/testdata/02/final.fsh.merge +++ b/server/testdata/02/final.fsh.merge @@ -1,4 +1,6 @@ #version 120 +#extension GL_GOOGLE_cpp_style_line_directive : enable +#line 2 "!!" #line 1 "!!" int sample() { diff --git a/server/testdata/03/final.fsh.merge b/server/testdata/03/final.fsh.merge index 4277745..a328117 100644 --- a/server/testdata/03/final.fsh.merge +++ b/server/testdata/03/final.fsh.merge @@ -1,4 +1,6 @@ #version 120 +#extension GL_GOOGLE_cpp_style_line_directive : enable +#line 2 "!!" #line 1 "!!" int sample() { diff --git a/server/testdata/04/final.fsh.merge b/server/testdata/04/final.fsh.merge index ff93439..47d97af 100644 --- a/server/testdata/04/final.fsh.merge +++ b/server/testdata/04/final.fsh.merge @@ -1,4 +1,6 @@ #version 120 +#extension GL_GOOGLE_cpp_style_line_directive : enable +#line 2 "!!" #line 1 "!!" #line 1 "!!" diff --git a/server/testdata/05/final.fsh.merge b/server/testdata/05/final.fsh.merge index 1d44edf..724eb5a 100644 --- a/server/testdata/05/final.fsh.merge +++ b/server/testdata/05/final.fsh.merge @@ -1,4 +1,6 @@ #version 120 +#extension GL_GOOGLE_cpp_style_line_directive : enable +#line 2 "!!" #line 1 "!!" float test() {