diff options
Diffstat (limited to 'src/graphics_permanent.rs')
| -rw-r--r-- | src/graphics_permanent.rs | 18 |
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) + } } |