Files
a0_basic_app
a1_vehicle
a2_async_sim
vehicle
ab_glyph
ab_glyph_rasterizer
adler
adler32
agents
aho_corasick
anyhow
approx
aquamarine
ash
extensions
experimental
ext
khr
mvk
nv
vk
atty
bitflags
bytemuck
byteorder
cache_padded
cfg_if
chrono
format
naive
offset
sys
color_quant
crc32fast
crossbeam_channel
crossbeam_deque
crossbeam_epoch
crossbeam_utils
deflate
draw2d
camera
geometry
glfw_window
graphics
ext
frame
layer
pipeline2d
texture_atlas
vertex
vulkan
buffer
command_pool
device
device_allocator
instance
swapchain
texture
either
flexi_logger
writers
file_log_writer
generic_array
gif
glfw
glfw_sys
glob
image
codecs
bmp
hdr
ico
jpeg
pnm
tga
webp
imageops
io
math
utils
indoc
itertools
adaptors
combinations.rscombinations_with_replacement.rsconcat_impl.rscons_tuples_impl.rsdiff.rseither_or_both.rsexactly_one_err.rsformat.rsfree.rsgroup_map.rsgroupbylazy.rsimpl_macros.rsintersperse.rskmerge_impl.rslazy_buffer.rslib.rsmerge_join.rsminmax.rsmultipeek_impl.rspad_tail.rspeeking_take_while.rspermutations.rsprocess_results_impl.rsput_back_n_impl.rsrciter_impl.rsrepeatn.rssize_hint.rssources.rstee.rstuple_impl.rsunique_impl.rswith_position.rszip_eq_impl.rszip_longest.rsziptuple.rs
jpeg_decoder
lazy_static
libc
unix
libloading
log
matrixmultiply
memchr
memoffset
miniz_oxide
nalgebra
base
alias.rsalias_slice.rsallocator.rsarray_storage.rsblas.rscg.rscomponentwise.rsconstraint.rsconstruction.rsconstruction_slice.rsconversion.rscoordinates.rsdefault_allocator.rsdimension.rsedition.rshelper.rsindexing.rsinterpolation.rsiter.rsmatrix.rsmatrix_simba.rsmatrix_slice.rsmin_max.rsmod.rsnorm.rsops.rsproperties.rsscalar.rsstatistics.rsstorage.rsswizzle.rsunit.rsvec_storage.rs
geometry
abstract_rotation.rsdual_quaternion.rsdual_quaternion_construction.rsdual_quaternion_conversion.rsdual_quaternion_ops.rsisometry.rsisometry_alias.rsisometry_construction.rsisometry_conversion.rsisometry_interpolation.rsisometry_ops.rsisometry_simba.rsmod.rsop_macros.rsorthographic.rsperspective.rspoint.rspoint_alias.rspoint_construction.rspoint_conversion.rspoint_coordinates.rspoint_ops.rspoint_simba.rsquaternion.rsquaternion_construction.rsquaternion_conversion.rsquaternion_coordinates.rsquaternion_ops.rsquaternion_simba.rsreflection.rsrotation.rsrotation_alias.rsrotation_construction.rsrotation_conversion.rsrotation_interpolation.rsrotation_ops.rsrotation_simba.rsrotation_specialization.rssimilarity.rssimilarity_alias.rssimilarity_construction.rssimilarity_conversion.rssimilarity_ops.rssimilarity_simba.rsswizzle.rstransform.rstransform_alias.rstransform_construction.rstransform_conversion.rstransform_ops.rstransform_simba.rstranslation.rstranslation_alias.rstranslation_construction.rstranslation_conversion.rstranslation_coordinates.rstranslation_ops.rstranslation_simba.rsunit_complex.rsunit_complex_construction.rsunit_complex_conversion.rsunit_complex_ops.rsunit_complex_simba.rs
linalg
third_party
num_complex
num_cpus
num_integer
num_iter
num_rational
num_traits
owned_ttf_parser
paste
png
proc_macro2
proc_macro_error
proc_macro_error_attr
quote
raw_window_handle
rawpointer
rayon
collections
compile_fail
iter
chain.rschunks.rscloned.rscopied.rsempty.rsenumerate.rsextend.rsfilter.rsfilter_map.rsfind.rsflat_map.rsflat_map_iter.rsflatten.rsflatten_iter.rsfold.rsfor_each.rsfrom_par_iter.rsinspect.rsinterleave.rsinterleave_shortest.rsintersperse.rslen.rsmap.rsmap_with.rsmod.rsmultizip.rsnoop.rsonce.rspanic_fuse.rspar_bridge.rspositions.rsproduct.rsreduce.rsrepeat.rsrev.rsskip.rssplitter.rsstep_by.rssum.rstake.rstry_fold.rstry_reduce.rstry_reduce_with.rsunzip.rsupdate.rswhile_some.rszip.rszip_eq.rs
slice
rayon_core
compile_fail
join
scope
sleep
spawn
thread_pool
regex
regex_syntax
ast
hir
unicode_tables
scoped_threadpool
scopeguard
semver
semver_parser
serde
de
private
ser
serde_derive
simba
scalar
simd
smawk
spin_sleep
syn
attr.rsawait.rsbigint.rsbuffer.rscustom_keyword.rscustom_punctuation.rsdata.rsderive.rsdiscouraged.rserror.rsexport.rsexpr.rsext.rsgenerics.rsgroup.rsident.rslib.rslifetime.rslit.rslookahead.rsmac.rsmacros.rsop.rsparse.rsparse_macro_input.rsparse_quote.rspath.rsprint.rspunctuated.rssealed.rsspan.rsspanned.rsthread.rstoken.rsty.rsverbatim.rs
terminal_size
textwrap
thiserror
thiserror_impl
tiff
time
triple_buffer
ttf_parser
tables
cff
cmap
typenum
unicode_width
unicode_xid
unindent
vk_sys
weezl
yansi
>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
//! This module defines the ShadeModule abstraction which makes it easy to //! create vulkan shader modules directly with the rust `include_bytes` macro. use crate::graphics::vulkan::{ffi, Device}; use anyhow::{Context, Result}; use ash::{version::DeviceV1_0, vk}; use std::sync::Arc; /// A wrapper for the vulkan shader module handle which destroys the module /// when dropped. pub struct ShaderModule { pub shader_module: vk::ShaderModule, device: Arc<Device>, } impl ShaderModule { /// Create a new shader module using the provided source. /// /// Panics if the source array is not divisible evenly into u32 words. pub fn new<Name>( device: &Arc<Device>, name: Name, source: &'static [u8], ) -> Result<Self> where Name: Into<String>, { let source_u32 = ffi::copy_to_u32(source); let create_info = vk::ShaderModuleCreateInfo { p_code: source_u32.as_ptr(), code_size: source_u32.len() * std::mem::size_of::<u32>(), ..Default::default() }; let shader_module = unsafe { device .logical_device .create_shader_module(&create_info, None) .context("unable to create shader module")? }; device.name_vulkan_object( name, vk::ObjectType::SHADER_MODULE, &shader_module, )?; Ok(Self { shader_module, device: device.clone(), }) } } impl Drop for ShaderModule { fn drop(&mut self) { unsafe { self.device .logical_device .destroy_shader_module(self.shader_module, None); } } }