summary refs log tree commit diff
path: root/src/graphics_permanent.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphics_permanent.rs')
-rw-r--r--src/graphics_permanent.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/graphics_permanent.rs b/src/graphics_permanent.rs
index a4ece9d..4df6069 100644
--- a/src/graphics_permanent.rs
+++ b/src/graphics_permanent.rs
@@ -4,6 +4,7 @@ use crate::error::*;
 use std::collections::{ BTreeMap, BTreeSet, HashSet };
 use std::ffi::{ c_void, CStr };
 use vulkanalia::{ Device, Entry, Instance, Version };
+use vulkanalia::bytecode::Bytecode;
 use vulkanalia::loader::{ LibloadingLoader, LIBRARY };
 use vulkanalia::vk::{ self, HasBuilder,
                       ApplicationInfo, InstanceCreateInfo,
@@ -672,6 +673,23 @@ impl PermanentGraphicsState {
       Ok(Acceptable::Accepted((capabilities, formats, presentation_modes)))
     }
   }
+
+  #[allow(unsafe_code)]
+  pub fn load_spirv_shader_module(device: &Device, binary: &[u8])
+      -> Result<vk::ShaderModule>
+  {
+    let bytecode = Bytecode::new(binary)?;
+
+    let module_info = vk::ShaderModuleCreateInfo::builder()
+                          .code(bytecode.code())
+                          .code_size(bytecode.code_size());
+
+    let module = unsafe {
+      device.create_shader_module(&module_info, None)
+    }?;
+
+    Ok(module)
+  }
 }