@ -828,6 +828,7 @@ fn write_desc_sets(
desc_sets : & Vec < vk ::DescriptorSet > ,
desc_sets : & Vec < vk ::DescriptorSet > ,
mesh_buf : & vk ::Buffer ,
mesh_buf : & vk ::Buffer ,
image_view : vk ::ImageView ,
image_view : vk ::ImageView ,
skybox_sampler : vk ::Sampler
) {
) {
let buf_info = vk ::DescriptorBufferInfo ::default ( )
let buf_info = vk ::DescriptorBufferInfo ::default ( )
. buffer ( * mesh_buf )
. buffer ( * mesh_buf )
@ -842,8 +843,9 @@ fn write_desc_sets(
. buffer_info ( & buf_infos ) ;
. buffer_info ( & buf_infos ) ;
let img_info = vk ::DescriptorImageInfo ::default ( )
let img_info = vk ::DescriptorImageInfo ::default ( )
. image_layout ( vk ::ImageLayout ::UNDEFINED )
. image_layout ( vk ::ImageLayout ::GENERAL )
. image_view ( image_view ) ;
. image_view ( image_view )
. sampler ( skybox_sampler ) ;
let img_infos = & [ img_info ] ;
let img_infos = & [ img_info ] ;
let img_desc = vk ::WriteDescriptorSet ::default ( )
let img_desc = vk ::WriteDescriptorSet ::default ( )
. dst_set ( desc_sets [ 0 ] )
. dst_set ( desc_sets [ 0 ] )
@ -944,6 +946,30 @@ fn record_commands(
. clear_values ( & clear_vals ) ;
. clear_values ( & clear_vals ) ;
unsafe {
unsafe {
let regions = ( 0 .. 6 )
. map ( | i | {
vk ::BufferImageCopy ::default ( )
. buffer_offset ( 3 * 2048 * 2048 * i )
. buffer_row_length ( 0 )
. buffer_image_height ( 0 )
. image_offset ( vk ::Offset3D ::default ( ) )
. image_extent ( vk ::Extent3D ::default ( ) . width ( 2048 ) . height ( 2048 ) . depth ( 1 ) )
. image_subresource (
vk ::ImageSubresourceLayers ::default ( )
. aspect_mask ( vk ::ImageAspectFlags ::COLOR )
. mip_level ( 0 )
. layer_count ( 1 )
. base_array_layer ( i as u32 ) ,
)
} )
. collect ::< Vec < _ > > ( ) ;
dev . cmd_copy_buffer_to_image (
* cmd_buf ,
* skybox_buffer ,
* skybox_image ,
vk ::ImageLayout ::GENERAL ,
& regions ,
) ;
dev . cmd_begin_render_pass ( * cmd_buf , & render_pass_info , vk ::SubpassContents ::INLINE ) ;
dev . cmd_begin_render_pass ( * cmd_buf , & render_pass_info , vk ::SubpassContents ::INLINE ) ;
dev . cmd_bind_pipeline ( * cmd_buf , vk ::PipelineBindPoint ::GRAPHICS , * pipe ) ;
dev . cmd_bind_pipeline ( * cmd_buf , vk ::PipelineBindPoint ::GRAPHICS , * pipe ) ;
dev . cmd_bind_descriptor_sets (
dev . cmd_bind_descriptor_sets (
@ -1011,30 +1037,7 @@ fn record_commands(
base_color . as_ref ( ) ,
base_color . as_ref ( ) ,
) ;
) ;
let regions = ( 0 .. 6 )
. map ( | i | {
vk ::BufferImageCopy ::default ( )
. buffer_offset ( 3 * 2048 * 2048 * i )
. buffer_row_length ( 0 )
. buffer_image_height ( 0 )
. image_offset ( vk ::Offset3D ::default ( ) )
. image_extent ( vk ::Extent3D ::default ( ) . width ( 2048 ) . height ( 2048 ) . depth ( 1 ) )
. image_subresource (
vk ::ImageSubresourceLayers ::default ( )
. aspect_mask ( vk ::ImageAspectFlags ::COLOR )
. mip_level ( 0 )
. layer_count ( 1 )
. base_array_layer ( i as u32 ) ,
)
} )
. collect ::< Vec < _ > > ( ) ;
dev . cmd_copy_buffer_to_image (
* cmd_buf ,
* skybox_buffer ,
* skybox_image ,
vk ::ImageLayout ::GENERAL ,
& regions ,
) ;
dev . cmd_draw ( * cmd_buf , 36 , 1 , 0 , 0 ) ;
dev . cmd_draw ( * cmd_buf , 36 , 1 , 0 , 0 ) ;
dev . cmd_end_render_pass ( * cmd_buf ) ;
dev . cmd_end_render_pass ( * cmd_buf ) ;
@ -1144,7 +1147,7 @@ fn handle_cont_key(keycode: Keycode, camera: &mut Camera, mouse: &MouseUtil) {
}
}
fn decode_rif ( raw : & [ u8 ] ) -> & [ u8 ] {
fn decode_rif ( raw : & [ u8 ] ) -> & [ u8 ] {
& raw [ 1 8 .. ]
& raw [ 1 7 .. ]
}
}
fn main ( ) {
fn main ( ) {
@ -1222,7 +1225,7 @@ fn main() {
unsafe {
unsafe {
std ::ptr ::copy ( POSITIONS . as_ptr ( ) , mesh_mem as * mut f32 , POSITIONS . len ( ) ) ;
std ::ptr ::copy ( POSITIONS . as_ptr ( ) , mesh_mem as * mut f32 , POSITIONS . len ( ) ) ;
}
}
let ( skybox_image , skybox_image_view , skybox_sampler ) = {
let ( skybox_image , skybox_image_view , skybox_sampler ) = {
let qf_idxs = [ rcs_queue_inx ] ;
let qf_idxs = [ rcs_queue_inx ] ;
let create_info = vk ::ImageCreateInfo ::default ( )
let create_info = vk ::ImageCreateInfo ::default ( )
@ -1236,10 +1239,16 @@ fn main() {
. tiling ( vk ::ImageTiling ::OPTIMAL )
. tiling ( vk ::ImageTiling ::OPTIMAL )
. usage ( vk ::ImageUsageFlags ::TRANSFER_DST | vk ::ImageUsageFlags ::SAMPLED )
. usage ( vk ::ImageUsageFlags ::TRANSFER_DST | vk ::ImageUsageFlags ::SAMPLED )
. sharing_mode ( vk ::SharingMode ::EXCLUSIVE )
. sharing_mode ( vk ::SharingMode ::EXCLUSIVE )
. initial_layout ( vk ::ImageLayout ::GENERAL )
. initial_layout ( vk ::ImageLayout ::UNDEFINED )
. queue_family_indices ( & qf_idxs ) ;
. queue_family_indices ( & qf_idxs ) ;
let image =
let image =
unsafe { dev . create_image ( & create_info , None ) } . expect ( "Failed to create image" ) ;
unsafe { dev . create_image ( & create_info , None ) } . expect ( "Failed to create image" ) ;
let skybox_mem_size : vk ::MemoryRequirements = unsafe { dev . get_image_memory_requirements ( image ) } ;
let skybox_dev_mem = mem_alloc ( & dev , host_invisible_inx , skybox_mem_size . size ) ;
unsafe {
dev . bind_image_memory ( image , skybox_dev_mem , 0 ) . expect ( "Failed to bind image memory" ) ;
}
let create_info = vk ::ImageViewCreateInfo ::default ( )
let create_info = vk ::ImageViewCreateInfo ::default ( )
. image ( image )
. image ( image )
. view_type ( vk ::ImageViewType ::CUBE )
. view_type ( vk ::ImageViewType ::CUBE )
@ -1268,6 +1277,7 @@ fn main() {
let sampler =
let sampler =
unsafe { dev . create_sampler ( & create_info , None ) } . expect ( "Failed to create sampler" ) ;
unsafe { dev . create_sampler ( & create_info , None ) } . expect ( "Failed to create sampler" ) ;
( image , image_view , sampler )
( image , image_view , sampler )
} ;
} ;
@ -1343,7 +1353,7 @@ fn main() {
let desc_sets = make_desc_sets ( & dev , & desc_pool ) ;
let desc_sets = make_desc_sets ( & dev , & desc_pool ) ;
write_desc_sets ( & dev , & desc_sets , & mesh_buf , skybox_image_view );
write_desc_sets ( & dev , & desc_sets , & mesh_buf , skybox_image_view , skybox_sampler );
let sem_avail = make_sem ( & dev ) ;
let sem_avail = make_sem ( & dev ) ;
let sem_finish = make_sem ( & dev ) ;
let sem_finish = make_sem ( & dev ) ;