Make it compilable from windows
This commit is contained in:
@@ -2,6 +2,5 @@
|
||||
pipeline_cache.bin
|
||||
log.log
|
||||
*.out.spv
|
||||
*.recompiled.spv
|
||||
*.spv-dis
|
||||
shaders_out
|
||||
Generated
+35
-26
@@ -39,9 +39,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "aligned"
|
||||
version = "0.4.2"
|
||||
version = "0.4.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "377e4c0ba83e4431b10df45c1d4666f178ea9c552cac93e60c3a88bf32785923"
|
||||
checksum = "ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685"
|
||||
dependencies = [
|
||||
"as-slice",
|
||||
]
|
||||
@@ -260,9 +260,9 @@ checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64"
|
||||
|
||||
[[package]]
|
||||
name = "bumpalo"
|
||||
version = "3.19.0"
|
||||
version = "3.19.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
|
||||
checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
|
||||
|
||||
[[package]]
|
||||
name = "bytemuck"
|
||||
@@ -349,9 +349,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.2.49"
|
||||
version = "1.2.50"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215"
|
||||
checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c"
|
||||
dependencies = [
|
||||
"find-msvc-tools",
|
||||
"jobserver",
|
||||
@@ -388,9 +388,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "cmake"
|
||||
version = "0.1.56"
|
||||
version = "0.1.57"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b042e5d8a74ae91bb0961acd039822472ec99f8ab0948cbf6d1369588f8be586"
|
||||
checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d"
|
||||
dependencies = [
|
||||
"cc",
|
||||
]
|
||||
@@ -1044,7 +1044,7 @@ dependencies = [
|
||||
"rgb",
|
||||
"tiff",
|
||||
"zune-core 0.5.0",
|
||||
"zune-jpeg 0.5.6",
|
||||
"zune-jpeg 0.5.7",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1215,13 +1215,13 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "libredox"
|
||||
version = "0.1.10"
|
||||
version = "0.1.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
|
||||
checksum = "df15f6eac291ed1cf25865b1ee60399f57e7c227e7f51bdbd4c5270396a9ed50"
|
||||
dependencies = [
|
||||
"bitflags 2.10.0",
|
||||
"libc",
|
||||
"redox_syscall 0.5.18",
|
||||
"redox_syscall 0.6.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1321,9 +1321,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "moxcms"
|
||||
version = "0.7.10"
|
||||
version = "0.7.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "80986bbbcf925ebd3be54c26613d861255284584501595cf418320c078945608"
|
||||
checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
"pxfm",
|
||||
@@ -2185,6 +2185,15 @@ dependencies = [
|
||||
"bitflags 2.10.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec96166dafa0886eb81fe1c0a388bece180fbef2135f97c1e2cf8302e74b43b5"
|
||||
dependencies = [
|
||||
"bitflags 2.10.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rgb"
|
||||
version = "0.8.52"
|
||||
@@ -2683,18 +2692,18 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "toml_datetime"
|
||||
version = "0.7.3"
|
||||
version = "0.7.5+spec-1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533"
|
||||
checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347"
|
||||
dependencies = [
|
||||
"serde_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_edit"
|
||||
version = "0.23.9"
|
||||
version = "0.23.10+spec-1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5d7cbc3b4b49633d57a0509303158ca50de80ae32c265093b24c414705807832"
|
||||
checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269"
|
||||
dependencies = [
|
||||
"indexmap",
|
||||
"toml_datetime",
|
||||
@@ -2704,18 +2713,18 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "toml_parser"
|
||||
version = "1.0.4"
|
||||
version = "1.0.6+spec-1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e"
|
||||
checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44"
|
||||
dependencies = [
|
||||
"winnow",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing"
|
||||
version = "0.1.43"
|
||||
version = "0.1.44"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647"
|
||||
checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
|
||||
dependencies = [
|
||||
"log",
|
||||
"pin-project-lite",
|
||||
@@ -2724,9 +2733,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "tracing-core"
|
||||
version = "0.1.35"
|
||||
version = "0.1.36"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c"
|
||||
checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
|
||||
|
||||
[[package]]
|
||||
name = "ttf-parser"
|
||||
@@ -3649,9 +3658,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "zune-jpeg"
|
||||
version = "0.5.6"
|
||||
version = "0.5.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f520eebad972262a1dde0ec455bce4f8b298b1e5154513de58c114c4c54303e8"
|
||||
checksum = "51d915729b0e7d5fe35c2f294c5dc10b30207cc637920e5b59077bfa3da63f28"
|
||||
dependencies = [
|
||||
"zune-core 0.5.0",
|
||||
]
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "tape-drive"
|
||||
version = "0.3.0"
|
||||
edition = "2021"
|
||||
edition = "2024"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
|
||||
@@ -4,4 +4,4 @@ A realtime renderer for implicit surfaces that JIT compiles the bytecode represe
|
||||
|
||||
## Building
|
||||
|
||||
`assemble_trace.sh && cargo build --release`
|
||||
`python assemble_trace.py && cargo build --release`
|
||||
|
||||
Executable
+83
@@ -0,0 +1,83 @@
|
||||
#!/bin/python3
|
||||
|
||||
import shutil
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import re
|
||||
|
||||
SHADERS_DIR = "shaders_out"
|
||||
TARGET_ENV = "vulkan1.3"
|
||||
|
||||
shutil.rmtree(SHADERS_DIR)
|
||||
os.mkdir(SHADERS_DIR)
|
||||
|
||||
normal_shaders = [
|
||||
("fullscreen.vert", "vert"),
|
||||
("lighting.frag", "frag"),
|
||||
("trace.vert", "vert"),
|
||||
("rgen", "rgen"),
|
||||
("rchit", "rchit"),
|
||||
("rmiss", "rmiss"),
|
||||
]
|
||||
|
||||
for shader, ty in normal_shaders:
|
||||
result = subprocess.run(
|
||||
[
|
||||
"glslangValidator",
|
||||
"--spirv-val",
|
||||
"-gVS",
|
||||
"-S",
|
||||
ty,
|
||||
"--target-env",
|
||||
TARGET_ENV,
|
||||
"-o",
|
||||
f"{SHADERS_DIR}/{shader}.spv",
|
||||
f"src/shaders/{shader}.glsl",
|
||||
]
|
||||
)
|
||||
if result.returncode != 0:
|
||||
sys.exit(result.returncode)
|
||||
|
||||
replacement_shaders = [("trace.frag", "frag"), ("normals.frag", "frag")]
|
||||
|
||||
for shader, ty in replacement_shaders:
|
||||
print(f"src/shaders/{shader}.glsl")
|
||||
result = subprocess.run(
|
||||
[
|
||||
"glslangValidator",
|
||||
"--spirv-val",
|
||||
"--spirv-dis",
|
||||
"-g0",
|
||||
"-S",
|
||||
ty,
|
||||
"--target-env",
|
||||
TARGET_ENV,
|
||||
"--quiet",
|
||||
"src/shaders/trace.frag.glsl",
|
||||
],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
)
|
||||
if result.returncode != 0:
|
||||
sys.exit(result.returncode)
|
||||
asm = result.stdout
|
||||
asm = re.sub(r"(?ms)%11 =.*OpFunctionEnd", "", asm)
|
||||
asm = re.sub(r"%11 ", "%1000 ", asm)
|
||||
with open(f"{SHADERS_DIR}/{shader}.spv-dis", "w") as f:
|
||||
f.write(asm)
|
||||
result = subprocess.run(
|
||||
[
|
||||
"spirv-as",
|
||||
"--preserve-numeric-ids",
|
||||
"--target-env",
|
||||
"vulkan1.3",
|
||||
"-o",
|
||||
f"{SHADERS_DIR}/{shader}.spv",
|
||||
],
|
||||
input=asm,
|
||||
encoding="ascii",
|
||||
)
|
||||
if result.returncode != 0:
|
||||
sys.exit(result.returncode)
|
||||
os.remove(f"{ty}.spv")
|
||||
@@ -1,28 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
rm -r shaders_out
|
||||
mkdir -p shaders_out
|
||||
|
||||
glslangValidator --spirv-val -gVS -S vert --target-env vulkan1.3 -o shaders_out/fullscreen.vert.spv src/shaders/fullscreen.vert.glsl
|
||||
glslangValidator --spirv-val -gVS -S frag --target-env vulkan1.3 -o shaders_out/lighting.frag.spv src/shaders/lighting.frag.glsl
|
||||
glslangValidator --spirv-val -gVS -S vert --target-env vulkan1.3 -o shaders_out/trace.vert.spv src/shaders/trace.vert.glsl
|
||||
|
||||
glslangValidator --spirv-val -gVS -S rgen --target-env vulkan1.3 -o shaders_out/rgen.spv src/shaders/rgen.glsl
|
||||
glslangValidator --spirv-val -gVS -S rchit --target-env vulkan1.3 -o shaders_out/rchit.spv src/shaders/rchit.glsl
|
||||
glslangValidator --spirv-val -gVS -S rmiss --target-env vulkan1.3 -o shaders_out/rmiss.spv src/shaders/rmiss.glsl
|
||||
|
||||
echo src/shaders/trace.frag.glsl
|
||||
glslangValidator --spirv-val --spirv-dis -g0 -S frag --target-env vulkan1.3 --quiet src/shaders/trace.frag.glsl > shaders_out/trace.spv-dis
|
||||
sed -i '/%11 =/,/OpFunctionEnd/d' shaders_out/trace.spv-dis
|
||||
sed -i 's/%11\b/%1000/g' shaders_out/trace.spv-dis
|
||||
spirv-as --preserve-numeric-ids --target-env vulkan1.3 -o shaders_out/trace.recompiled.spv shaders_out/trace.spv-dis
|
||||
rm frag.spv
|
||||
# rm shaders_out/trace.spv-dis
|
||||
|
||||
echo src/shaders/normals.frag.glsl
|
||||
glslangValidator --spirv-val --spirv-dis -g0 -S frag --target-env vulkan1.3 --quiet src/shaders/normals.frag.glsl > shaders_out/normals.spv-dis
|
||||
sed -i '/%11 =/,/OpFunctionEnd/d' shaders_out/normals.spv-dis
|
||||
sed -i 's/%11\b/%1000/g' shaders_out/normals.spv-dis
|
||||
spirv-as --preserve-numeric-ids --target-env vulkan1.3 -o shaders_out/normals.recompiled.spv shaders_out/normals.spv-dis
|
||||
rm frag.spv
|
||||
# rm shaders_out/normals.spv-dis
|
||||
@@ -4,7 +4,7 @@ fn main() {
|
||||
//let mut output = std::fs::File::create("output.txt").unwrap();
|
||||
println!("cargo:rerun-if-changed=build.rs");
|
||||
println!("cargo:rerun-if-changed=Cargo.lock");
|
||||
println!("cargo:rerun-if-changed=assemble_trace.sh");
|
||||
println!("cargo:rerun-if-changed=assemble_trace.py");
|
||||
|
||||
let paths = read_dir("src/shaders").unwrap();
|
||||
for path in paths {
|
||||
@@ -22,8 +22,8 @@ fn main() {
|
||||
}
|
||||
}
|
||||
|
||||
Command::new("bash")
|
||||
.arg("assemble_trace.sh")
|
||||
Command::new("python")
|
||||
.arg("assemble_trace.py")
|
||||
.status()
|
||||
.expect("Failed to assemble header shaders");
|
||||
}
|
||||
|
||||
+21
-24
@@ -228,7 +228,7 @@ struct App {
|
||||
thread_work_creation: mpmc::Sender<WorkItem>,
|
||||
thread_work_completion: mpsc::Receiver<WorkComplete>,
|
||||
rcx: Arc<Mutex<Option<RenderContext>>>,
|
||||
_watcher: RecommendedWatcher,
|
||||
_watcher: Option<RecommendedWatcher>,
|
||||
glsl_changed: Arc<AtomicBool>,
|
||||
}
|
||||
|
||||
@@ -521,7 +521,7 @@ impl App {
|
||||
.wait(None)
|
||||
.unwrap();
|
||||
|
||||
let trace_spv_code = include_bytes!("../shaders_out/trace.recompiled.spv");
|
||||
let trace_spv_code = include_bytes!("../shaders_out/trace.frag.spv");
|
||||
let trace_spv_code_u32 = vulkano::shader::spirv::bytes_to_words(trace_spv_code)
|
||||
.unwrap()
|
||||
.into_owned();
|
||||
@@ -529,7 +529,7 @@ impl App {
|
||||
rspirv::binary::parse_words(trace_spv_code_u32, &mut loader).unwrap();
|
||||
let trace_module = loader.module();
|
||||
|
||||
let normals_spv_code = include_bytes!("../shaders_out/normals.recompiled.spv");
|
||||
let normals_spv_code = include_bytes!("../shaders_out/normals.frag.spv");
|
||||
let normals_spv_code_u32 = vulkano::shader::spirv::bytes_to_words(normals_spv_code)
|
||||
.unwrap()
|
||||
.into_owned();
|
||||
@@ -552,11 +552,10 @@ impl App {
|
||||
|
||||
let glsl_changed = Arc::new(AtomicBool::new(false));
|
||||
let watcher_glsl_changed = glsl_changed.clone();
|
||||
let mut _watcher = notify::recommended_watcher(
|
||||
let mut watcher = notify::recommended_watcher(
|
||||
move |res: Result<notify::Event, notify::Error>| match res {
|
||||
Ok(event) => {
|
||||
//info!("event: {:?}", event);
|
||||
#[cfg(target_os = "linux")]
|
||||
match event.kind {
|
||||
notify::EventKind::Modify(notify::event::ModifyKind::Data(_)) => {
|
||||
info!("event: {:?}", event);
|
||||
@@ -568,23 +567,21 @@ impl App {
|
||||
Err(e) => error!("watch error: {:?}", e),
|
||||
},
|
||||
)
|
||||
.unwrap();
|
||||
.ok();
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
if watcher.is_some()
|
||||
&& let Ok(paths) = std::fs::read_dir("src/shaders")
|
||||
{
|
||||
let paths = std::fs::read_dir("src/shaders").unwrap();
|
||||
for path in paths {
|
||||
if let Ok(path) = path {
|
||||
if path
|
||||
.path()
|
||||
.extension()
|
||||
.map(|ext| ext == "glsl")
|
||||
.unwrap_or(false)
|
||||
{
|
||||
_watcher
|
||||
.watch(&path.path(), notify::RecursiveMode::NonRecursive)
|
||||
.unwrap();
|
||||
}
|
||||
if let Ok(path) = path
|
||||
&& path.path().extension().is_some_and(|ext| ext == "glsl")
|
||||
&& let Some(watcher) = &mut watcher
|
||||
{
|
||||
let _ = watcher
|
||||
.watch(&path.path(), notify::RecursiveMode::NonRecursive)
|
||||
.inspect_err(|f| {
|
||||
error!("Failed to watch {}: {}", path.path().display(), f)
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -615,7 +612,7 @@ impl App {
|
||||
thread_work_creation: thread_work_creation_sender,
|
||||
thread_work_completion: thread_work_completion_receiver,
|
||||
rcx: Arc::new(Mutex::new(None)),
|
||||
_watcher,
|
||||
_watcher: watcher,
|
||||
glsl_changed,
|
||||
}
|
||||
}
|
||||
@@ -1547,7 +1544,7 @@ impl App {
|
||||
}
|
||||
|
||||
fn load_all_spv_from_file(&mut self, rcx: &mut RenderContext) {
|
||||
let trace_frag = read_spirv_words_from_file("trace.recompiled.spv");
|
||||
let trace_frag = read_spirv_words_from_file("trace.frag.spv");
|
||||
if trace_frag.is_err() {
|
||||
error!("Could not read trace frag file");
|
||||
return;
|
||||
@@ -1561,7 +1558,7 @@ impl App {
|
||||
}
|
||||
let trace_vert = trace_vert.unwrap();
|
||||
|
||||
let normals_frag = read_spirv_words_from_file("normals.recompiled.spv");
|
||||
let normals_frag = read_spirv_words_from_file("normals.frag.spv");
|
||||
if normals_frag.is_err() {
|
||||
error!("Could not read normals frag file");
|
||||
return;
|
||||
@@ -1742,8 +1739,8 @@ impl App {
|
||||
if self.glsl_changed.load(std::sync::atomic::Ordering::SeqCst) {
|
||||
self.glsl_changed
|
||||
.store(false, std::sync::atomic::Ordering::SeqCst);
|
||||
if std::process::Command::new("bash")
|
||||
.arg("assemble_trace.sh")
|
||||
if std::process::Command::new("python")
|
||||
.arg("assemble_trace.py")
|
||||
.status()
|
||||
.is_err()
|
||||
{
|
||||
|
||||
+1
-1
@@ -82,7 +82,7 @@ pub(crate) fn load_obj(
|
||||
for v in &p.0 {
|
||||
//trace!("{:?}", v);
|
||||
let mapping = ((v.0) as u32, (v.2.unwrap_or(0)) as u32);
|
||||
if let Some(&exist) = &temp_hash_map.get(&mapping) {
|
||||
if let Some(&exist) = temp_hash_map.get(&mapping) {
|
||||
//trace!("{:?}", exist);
|
||||
indices.push(exist);
|
||||
} else {
|
||||
|
||||
+30
-24
@@ -185,12 +185,14 @@ unsafe fn build_acceleration_structure_common(
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
builder
|
||||
.build_acceleration_structure(
|
||||
as_build_geometry_info,
|
||||
iter::once(as_build_range_info).collect(),
|
||||
)
|
||||
.unwrap();
|
||||
unsafe {
|
||||
builder
|
||||
.build_acceleration_structure(
|
||||
as_build_geometry_info,
|
||||
iter::once(as_build_range_info).collect(),
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
builder
|
||||
.build()
|
||||
@@ -223,15 +225,17 @@ unsafe fn build_acceleration_structure_triangles(
|
||||
|
||||
let geometries = AccelerationStructureGeometries::Triangles(vec![as_geometry_triangles_data]);
|
||||
|
||||
build_acceleration_structure_common(
|
||||
geometries,
|
||||
primitive_count,
|
||||
AccelerationStructureType::BottomLevel,
|
||||
memory_allocator,
|
||||
command_buffer_allocator,
|
||||
device,
|
||||
queue,
|
||||
)
|
||||
unsafe {
|
||||
build_acceleration_structure_common(
|
||||
geometries,
|
||||
primitive_count,
|
||||
AccelerationStructureType::BottomLevel,
|
||||
memory_allocator,
|
||||
command_buffer_allocator,
|
||||
device,
|
||||
queue,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
unsafe fn build_top_level_acceleration_structure(
|
||||
@@ -265,13 +269,15 @@ unsafe fn build_top_level_acceleration_structure(
|
||||
|
||||
let geometries = AccelerationStructureGeometries::Instances(as_geometry_instances_data);
|
||||
|
||||
build_acceleration_structure_common(
|
||||
geometries,
|
||||
primitive_count,
|
||||
AccelerationStructureType::TopLevel,
|
||||
allocator,
|
||||
command_buffer_allocator,
|
||||
device,
|
||||
queue,
|
||||
)
|
||||
unsafe {
|
||||
build_acceleration_structure_common(
|
||||
geometries,
|
||||
primitive_count,
|
||||
AccelerationStructureType::TopLevel,
|
||||
allocator,
|
||||
command_buffer_allocator,
|
||||
device,
|
||||
queue,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user