aboutsummaryrefslogtreecommitdiff
path: root/stockton-render/src/draw/builders/shader.rs
diff options
context:
space:
mode:
authortcmal <me@aria.rip>2024-08-25 17:44:23 +0100
committertcmal <me@aria.rip>2024-08-25 17:44:23 +0100
commit47a0c0317cc774c19b78582bec9b5b09d56f569a (patch)
treed03471ea4e084ace9b95a2c5b7febb780b45bb63 /stockton-render/src/draw/builders/shader.rs
parentfb996488aa651cb2e7f46abc083c4318b47e77cd (diff)
feat(render): draw passes
Diffstat (limited to 'stockton-render/src/draw/builders/shader.rs')
-rw-r--r--stockton-render/src/draw/builders/shader.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/stockton-render/src/draw/builders/shader.rs b/stockton-render/src/draw/builders/shader.rs
new file mode 100644
index 0000000..fde185d
--- /dev/null
+++ b/stockton-render/src/draw/builders/shader.rs
@@ -0,0 +1,35 @@
+use crate::types::*;
+
+use anyhow::{Context, Result};
+use hal::pso::Specialization;
+use shaderc::{Compiler, ShaderKind};
+
+#[derive(Debug, Clone)]
+pub struct ShaderDesc {
+ pub source: String,
+ pub entry: String,
+ pub kind: ShaderKind,
+}
+
+impl ShaderDesc {
+ pub fn compile(&self, compiler: &mut Compiler, device: &mut DeviceT) -> Result<ShaderModuleT> {
+ let artifact = compiler
+ .compile_into_spirv(&self.source, self.kind, "shader", &self.entry, None)
+ .context("Shader compilation failed")?;
+
+ // Make into shader module
+ Ok(unsafe {
+ device
+ .create_shader_module(artifact.as_binary())
+ .context("Shader module creation failed")?
+ })
+ }
+
+ pub fn as_entry<'a>(&'a self, module: &'a ShaderModuleT) -> EntryPoint<'a> {
+ EntryPoint {
+ entry: &self.entry,
+ module,
+ specialization: Specialization::default(),
+ }
+ }
+}