diff --git a/client/Cargo.toml b/client/Cargo.toml index 178f98fd..52b29a5e 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -12,11 +12,11 @@ license = "Apache-2.0 OR Zlib" common = { path = "../common" } server = { path = "../server" } tracing = "0.1.10" -ash = { version = "0.37.1", features = ["loaded"] } -lahar = { git = "https://github.com/Ralith/lahar", rev = "88abd75e41d04c3a4199d95f581cb135f5962844" } -winit = { version = "0.29.10", features = ["rwh_05"] } -ash-window = "0.12.0" -raw-window-handle = { version = "0.5.0", features = ["std"] } +ash = { version = "0.38.0", default-features = false, features = ["loaded", "debug", "std"] } +lahar = { git = "https://github.com/Ralith/lahar", rev = "7963ae5750ea61fa0a894dbb73d3be0ac77255d2" } +winit = "0.29.10" +ash-window = "0.13" +raw-window-handle = "0.6" directories = "5.0.1" vk-shader-macros = "0.2.5" nalgebra = { workspace = true } diff --git a/client/benches/surface_extraction.rs b/client/benches/surface_extraction.rs index afc4746b..ffa2b9e8 100644 --- a/client/benches/surface_extraction.rs +++ b/client/benches/surface_extraction.rs @@ -19,14 +19,14 @@ fn extract(bench: &mut Bencher) { unsafe { let cmd_pool = device .create_command_pool( - &vk::CommandPoolCreateInfo::builder().queue_family_index(gfx.queue_family), + &vk::CommandPoolCreateInfo::default().queue_family_index(gfx.queue_family), None, ) .unwrap(); let cmd = device .allocate_command_buffers( - &vk::CommandBufferAllocateInfo::builder() + &vk::CommandBufferAllocateInfo::default() .command_pool(cmd_pool) .command_buffer_count(1), ) @@ -59,7 +59,7 @@ fn extract(bench: &mut Bencher) { device .queue_submit( gfx.queue, - &[vk::SubmitInfo::builder().command_buffers(&[cmd]).build()], + &[vk::SubmitInfo::default().command_buffers(&[cmd])], vk::Fence::null(), ) .unwrap(); diff --git a/client/src/graphics/base.rs b/client/src/graphics/base.rs index 1ebe8acf..95812081 100644 --- a/client/src/graphics/base.rs +++ b/client/src/graphics/base.rs @@ -1,9 +1,10 @@ //! Common state shared throughout the graphics system +use ash::ext::debug_utils; use std::ffi::{c_char, CStr}; use std::path::PathBuf; use std::sync::Arc; -use std::{fs, io, ptr}; +use std::{fs, io}; use tracing::{error, info, trace, warn}; use ash::{vk, Device}; @@ -34,6 +35,7 @@ pub struct Base { pub limits: vk::PhysicalDeviceLimits, pub timestamp_bits: u32, pipeline_cache_path: Option, + debug_utils: Option, } unsafe impl Send for Base {} @@ -133,11 +135,10 @@ impl Base { instance .create_device( physical, - &vk::DeviceCreateInfo::builder() - .queue_create_infos(&[vk::DeviceQueueCreateInfo::builder() + &vk::DeviceCreateInfo::default() + .queue_create_infos(&[vk::DeviceQueueCreateInfo::default() .queue_family_index(queue_family_index) - .queue_priorities(&[1.0]) - .build()]) + .queue_priorities(&[1.0])]) .enabled_extension_names(&device_exts), None, ) @@ -147,14 +148,14 @@ impl Base { let memory_properties = instance.get_physical_device_memory_properties(physical); let pipeline_cache = device .create_pipeline_cache( - &vk::PipelineCacheCreateInfo::builder().initial_data(&pipeline_cache_data), + &vk::PipelineCacheCreateInfo::default().initial_data(&pipeline_cache_data), None, ) .unwrap(); let render_pass = device .create_render_pass( - &vk::RenderPassCreateInfo::builder() + &vk::RenderPassCreateInfo::default() .attachments(&[ vk::AttachmentDescription { format: COLOR_FORMAT, @@ -176,7 +177,7 @@ impl Base { }, ]) .subpasses(&[ - vk::SubpassDescription::builder() + vk::SubpassDescription::default() .color_attachments(&[vk::AttachmentReference { attachment: 0, layout: vk::ImageLayout::COLOR_ATTACHMENT_OPTIMAL, @@ -185,9 +186,8 @@ impl Base { attachment: 1, layout: vk::ImageLayout::DEPTH_STENCIL_ATTACHMENT_OPTIMAL, }) - .pipeline_bind_point(vk::PipelineBindPoint::GRAPHICS) - .build(), - vk::SubpassDescription::builder() + .pipeline_bind_point(vk::PipelineBindPoint::GRAPHICS), + vk::SubpassDescription::default() .color_attachments(&[vk::AttachmentReference { attachment: 0, layout: vk::ImageLayout::COLOR_ATTACHMENT_OPTIMAL, @@ -196,8 +196,7 @@ impl Base { attachment: 1, layout: vk::ImageLayout::DEPTH_STENCIL_READ_ONLY_OPTIMAL, }]) - .pipeline_bind_point(vk::PipelineBindPoint::GRAPHICS) - .build(), + .pipeline_bind_point(vk::PipelineBindPoint::GRAPHICS), ]) .dependencies(&[ vk::SubpassDependency { @@ -225,7 +224,7 @@ impl Base { let linear_sampler = device .create_sampler( - &vk::SamplerCreateInfo::builder() + &vk::SamplerCreateInfo::default() .min_filter(vk::Filter::LINEAR) .mag_filter(vk::Filter::LINEAR) .mipmap_mode(vk::SamplerMipmapMode::NEAREST) @@ -238,7 +237,7 @@ impl Base { let common_layout = device .create_descriptor_set_layout( - &vk::DescriptorSetLayoutCreateInfo::builder().bindings(&[ + &vk::DescriptorSetLayoutCreateInfo::default().bindings(&[ // Uniforms vk::DescriptorSetLayoutBinding { binding: 0, @@ -246,7 +245,7 @@ impl Base { descriptor_count: 1, stage_flags: vk::ShaderStageFlags::VERTEX | vk::ShaderStageFlags::FRAGMENT, - p_immutable_samplers: ptr::null(), + ..Default::default() }, // Depth buffer vk::DescriptorSetLayoutBinding { @@ -254,12 +253,16 @@ impl Base { descriptor_type: vk::DescriptorType::INPUT_ATTACHMENT, descriptor_count: 1, stage_flags: vk::ShaderStageFlags::FRAGMENT, - p_immutable_samplers: ptr::null(), + ..Default::default() }, ]), None, ) .unwrap(); + let debug_utils = core + .debug_utils + .as_ref() + .map(|_| debug_utils::Device::new(&core.instance, &device)); Some(Self { core, @@ -275,6 +278,7 @@ impl Base { pipeline_cache_path, limits: physical_properties.properties.limits, timestamp_bits: queue_family_properties.timestamp_valid_bits, + debug_utils, }) } } @@ -301,15 +305,12 @@ impl Base { /// Set an object's name for use in diagnostics pub unsafe fn set_name(&self, object: T, name: &CStr) { - let ex = match self.core.debug_utils.as_ref() { - Some(x) => x, - None => return, + let Some(ref ex) = self.debug_utils else { + return; }; ex.set_debug_utils_object_name( - self.device.handle(), - &vk::DebugUtilsObjectNameInfoEXT::builder() - .object_type(T::TYPE) - .object_handle(object.as_raw()) + &vk::DebugUtilsObjectNameInfoEXT::default() + .object_handle(object) .object_name(name), ) .unwrap(); diff --git a/client/src/graphics/core.rs b/client/src/graphics/core.rs index 25448165..252ad7f8 100644 --- a/client/src/graphics/core.rs +++ b/client/src/graphics/core.rs @@ -4,7 +4,7 @@ use std::os::raw::c_void; use std::ptr; use std::slice; -use ash::extensions::ext::DebugUtils; +use ash::ext::debug_utils; use ash::{vk, Entry, Instance}; use tracing::{debug, error, info, trace, warn}; @@ -20,7 +20,7 @@ pub struct Core { /// Diagnostic infrastructure, configured if the environment supports them. Typically present /// when the Vulkan validation layers are enabled or a graphics debugger is in use and absent /// otherwise. - pub debug_utils: Option, + pub debug_utils: Option, messenger: vk::DebugUtilsMessengerEXT, } @@ -43,11 +43,11 @@ impl Core { let supported_exts = entry.enumerate_instance_extension_properties(None).unwrap(); let has_debug = supported_exts .iter() - .any(|x| CStr::from_ptr(x.extension_name.as_ptr()) == DebugUtils::name()); + .any(|x| CStr::from_ptr(x.extension_name.as_ptr()) == debug_utils::NAME); let mut exts = exts.to_vec(); if has_debug { - exts.push(DebugUtils::name().as_ptr()); + exts.push(debug_utils::NAME.as_ptr()); } else { info!("vulkan debugging unavailable"); } @@ -63,17 +63,17 @@ impl Core { let name = cstr!("hypermine"); - let app_info = vk::ApplicationInfo::builder() + let app_info = vk::ApplicationInfo::default() .application_name(name) .application_version(0) .engine_name(name) .engine_version(0) .api_version(vk::make_api_version(0, 1, 1, 0)); - let mut instance_info = vk::InstanceCreateInfo::builder() + let mut instance_info = vk::InstanceCreateInfo::default() .application_info(&app_info) .enabled_extension_names(&exts); - let mut debug_utils_messenger_info = vk::DebugUtilsMessengerCreateInfoEXT::builder() + let mut debug_utils_messenger_info = vk::DebugUtilsMessengerCreateInfoEXT::default() .message_severity( vk::DebugUtilsMessageSeverityFlagsEXT::ERROR | vk::DebugUtilsMessageSeverityFlagsEXT::WARNING @@ -98,7 +98,7 @@ impl Core { let messenger; if has_debug { // Configure Vulkan diagnostic message logging - let utils = DebugUtils::new(&entry, &instance); + let utils = debug_utils::Instance::new(&entry, &instance); messenger = utils .create_debug_utils_messenger(&debug_utils_messenger_info, None) .unwrap(); diff --git a/client/src/graphics/draw.rs b/client/src/graphics/draw.rs index 76576186..e282770a 100644 --- a/client/src/graphics/draw.rs +++ b/client/src/graphics/draw.rs @@ -44,9 +44,9 @@ pub struct Draw { fog: Fog, /// Reusable storage for barriers that prevent races between image upload and read - image_barriers: Vec, + image_barriers: Vec>, /// Reusable storage for barriers that prevent races between buffer upload and read - buffer_barriers: Vec, + buffer_barriers: Vec>, /// Miscellany character_model: Asset, @@ -63,7 +63,7 @@ impl Draw { // Allocate a command buffer for each frame state let cmd_pool = device .create_command_pool( - &vk::CommandPoolCreateInfo::builder() + &vk::CommandPoolCreateInfo::default() .queue_family_index(gfx.queue_family) .flags( vk::CommandPoolCreateFlags::RESET_COMMAND_BUFFER @@ -74,7 +74,7 @@ impl Draw { .unwrap(); let cmds = device .allocate_command_buffers( - &vk::CommandBufferAllocateInfo::builder() + &vk::CommandBufferAllocateInfo::default() .command_pool(cmd_pool) .command_buffer_count(2 * PIPELINE_DEPTH), ) @@ -82,7 +82,7 @@ impl Draw { let timestamp_pool = device .create_query_pool( - &vk::QueryPoolCreateInfo::builder() + &vk::QueryPoolCreateInfo::default() .query_type(vk::QueryType::TIMESTAMP) .query_count(TIMESTAMPS_PER_FRAME * PIPELINE_DEPTH), None, @@ -92,7 +92,7 @@ impl Draw { let common_pipeline_layout = device .create_pipeline_layout( - &vk::PipelineLayoutCreateInfo::builder().set_layouts(&[gfx.common_layout]), + &vk::PipelineLayoutCreateInfo::default().set_layouts(&[gfx.common_layout]), None, ) .unwrap(); @@ -101,7 +101,7 @@ impl Draw { // uniforms) let common_descriptor_pool = device .create_descriptor_pool( - &vk::DescriptorPoolCreateInfo::builder() + &vk::DescriptorPoolCreateInfo::default() .max_sets(PIPELINE_DEPTH) .pool_sizes(&[ vk::DescriptorPoolSize { @@ -118,7 +118,7 @@ impl Draw { .unwrap(); let common_ds = device .allocate_descriptor_sets( - &vk::DescriptorSetAllocateInfo::builder() + &vk::DescriptorSetAllocateInfo::default() .descriptor_pool(common_descriptor_pool) .set_layouts(&vec![gfx.common_layout; PIPELINE_DEPTH as usize]), ) @@ -137,7 +137,7 @@ impl Draw { vk::BufferUsageFlags::UNIFORM_BUFFER, ); device.update_descriptor_sets( - &[vk::WriteDescriptorSet::builder() + &[vk::WriteDescriptorSet::default() .dst_set(common_ds) .dst_binding(0) .descriptor_type(vk::DescriptorType::UNIFORM_BUFFER) @@ -145,8 +145,7 @@ impl Draw { buffer: uniforms.buffer(), offset: 0, range: vk::WHOLE_SIZE, - }]) - .build()], + }])], &[], ); let x = State { @@ -156,7 +155,7 @@ impl Draw { image_acquired: device.create_semaphore(&Default::default(), None).unwrap(), fence: device .create_fence( - &vk::FenceCreateInfo::builder() + &vk::FenceCreateInfo::default() .flags(vk::FenceCreateFlags::SIGNALED), None, ) @@ -281,7 +280,7 @@ impl Draw { // Set up framebuffer attachments device.update_descriptor_sets( - &[vk::WriteDescriptorSet::builder() + &[vk::WriteDescriptorSet::default() .dst_set(state.common_ds) .dst_binding(1) .descriptor_type(vk::DescriptorType::INPUT_ATTACHMENT) @@ -289,8 +288,7 @@ impl Draw { sampler: vk::Sampler::null(), image_view: depth_view, image_layout: vk::ImageLayout::DEPTH_STENCIL_READ_ONLY_OPTIMAL, - }]) - .build()], + }])], &[], ); @@ -305,7 +303,6 @@ impl Draw { .get_query_pool_results( self.timestamp_pool, first_query, - TIMESTAMPS_PER_FRAME, &mut queries, vk::QueryResultFlags::TYPE_64 | vk::QueryResultFlags::WAIT, ) @@ -321,14 +318,14 @@ impl Draw { device .begin_command_buffer( cmd, - &vk::CommandBufferBeginInfo::builder() + &vk::CommandBufferBeginInfo::default() .flags(vk::CommandBufferUsageFlags::ONE_TIME_SUBMIT), ) .unwrap(); device .begin_command_buffer( state.post_cmd, - &vk::CommandBufferBeginInfo::builder() + &vk::CommandBufferBeginInfo::default() .flags(vk::CommandBufferUsageFlags::ONE_TIME_SUBMIT), ) .unwrap(); @@ -348,12 +345,11 @@ impl Draw { // latency. state.uniforms.record_transfer(device, cmd); self.buffer_barriers.push( - vk::BufferMemoryBarrier::builder() + vk::BufferMemoryBarrier::default() .src_access_mask(vk::AccessFlags::TRANSFER_WRITE) .dst_access_mask(vk::AccessFlags::SHADER_READ) .buffer(state.uniforms.buffer()) - .size(vk::WHOLE_SIZE) - .build(), + .size(vk::WHOLE_SIZE), ); if let (Some(voxels), Some(sim)) = (self.voxels.as_mut(), sim.as_mut()) { @@ -381,7 +377,7 @@ impl Draw { device.cmd_begin_render_pass( cmd, - &vk::RenderPassBeginInfo::builder() + &vk::RenderPassBeginInfo::default() .render_pass(self.gfx.render_pass) .framebuffer(framebuffer) .render_area(vk::Rect2D { @@ -501,15 +497,12 @@ impl Draw { .queue_submit( self.gfx.queue, &[ - vk::SubmitInfo::builder() + vk::SubmitInfo::default() .command_buffers(&[cmd]) .wait_semaphores(&[state.image_acquired]) .wait_dst_stage_mask(&[vk::PipelineStageFlags::COLOR_ATTACHMENT_OUTPUT]) - .signal_semaphores(&[present]) - .build(), - vk::SubmitInfo::builder() - .command_buffers(&[state.post_cmd]) - .build(), + .signal_semaphores(&[present]), + vk::SubmitInfo::default().command_buffers(&[state.post_cmd]), ], state.fence, ) diff --git a/client/src/graphics/fog.rs b/client/src/graphics/fog.rs index 98fbe397..cdbcfd5c 100644 --- a/client/src/graphics/fog.rs +++ b/client/src/graphics/fog.rs @@ -18,20 +18,20 @@ impl Fog { unsafe { // Construct the shader modules let vert = device - .create_shader_module(&vk::ShaderModuleCreateInfo::builder().code(VERT), None) + .create_shader_module(&vk::ShaderModuleCreateInfo::default().code(VERT), None) .unwrap(); // Note that these only need to live until the pipeline itself is constructed let v_guard = defer(|| device.destroy_shader_module(vert, None)); let frag = device - .create_shader_module(&vk::ShaderModuleCreateInfo::builder().code(FRAG), None) + .create_shader_module(&vk::ShaderModuleCreateInfo::default().code(FRAG), None) .unwrap(); let f_guard = defer(|| device.destroy_shader_module(frag, None)); // Define the outward-facing interface of the shaders, incl. uniforms, samplers, etc. let pipeline_layout = device .create_pipeline_layout( - &vk::PipelineLayoutCreateInfo::builder().set_layouts(&[gfx.common_layout]), + &vk::PipelineLayoutCreateInfo::default().set_layouts(&[gfx.common_layout]), None, ) .unwrap(); @@ -40,7 +40,7 @@ impl Fog { let mut pipelines = device .create_graphics_pipelines( gfx.pipeline_cache, - &[vk::GraphicsPipelineCreateInfo::builder() + &[vk::GraphicsPipelineCreateInfo::default() .stages(&[ vk::PipelineShaderStageCreateInfo { stage: vk::ShaderStageFlags::VERTEX, @@ -57,31 +57,31 @@ impl Fog { ]) .vertex_input_state(&vk::PipelineVertexInputStateCreateInfo::default()) .input_assembly_state( - &vk::PipelineInputAssemblyStateCreateInfo::builder() + &vk::PipelineInputAssemblyStateCreateInfo::default() .topology(vk::PrimitiveTopology::TRIANGLE_LIST), ) .viewport_state( - &vk::PipelineViewportStateCreateInfo::builder() + &vk::PipelineViewportStateCreateInfo::default() .scissor_count(1) .viewport_count(1), ) .rasterization_state( - &vk::PipelineRasterizationStateCreateInfo::builder() + &vk::PipelineRasterizationStateCreateInfo::default() .cull_mode(vk::CullModeFlags::NONE) .polygon_mode(vk::PolygonMode::FILL) .line_width(1.0), ) .multisample_state( - &vk::PipelineMultisampleStateCreateInfo::builder() + &vk::PipelineMultisampleStateCreateInfo::default() .rasterization_samples(vk::SampleCountFlags::TYPE_1), ) .depth_stencil_state( - &vk::PipelineDepthStencilStateCreateInfo::builder() + &vk::PipelineDepthStencilStateCreateInfo::default() .depth_test_enable(false) .depth_write_enable(false), ) .color_blend_state( - &vk::PipelineColorBlendStateCreateInfo::builder().attachments(&[ + &vk::PipelineColorBlendStateCreateInfo::default().attachments(&[ vk::PipelineColorBlendAttachmentState { blend_enable: vk::TRUE, src_color_blend_factor: vk::BlendFactor::ONE_MINUS_SRC_ALPHA, @@ -95,15 +95,14 @@ impl Fog { ]), ) .dynamic_state( - &vk::PipelineDynamicStateCreateInfo::builder().dynamic_states(&[ + &vk::PipelineDynamicStateCreateInfo::default().dynamic_states(&[ vk::DynamicState::VIEWPORT, vk::DynamicState::SCISSOR, ]), ) .layout(pipeline_layout) .render_pass(gfx.render_pass) - .subpass(1) - .build()], + .subpass(1)], None, ) .unwrap() diff --git a/client/src/graphics/gltf_mesh.rs b/client/src/graphics/gltf_mesh.rs index a6d787ae..70a8a078 100644 --- a/client/src/graphics/gltf_mesh.rs +++ b/client/src/graphics/gltf_mesh.rs @@ -142,7 +142,7 @@ async fn load_primitive( unsafe { let color_view = device .create_image_view( - &vk::ImageViewCreateInfo::builder() + &vk::ImageViewCreateInfo::default() .image(color.handle) .view_type(vk::ImageViewType::TYPE_2D) .format(vk::Format::R8G8B8A8_SRGB) @@ -158,7 +158,7 @@ async fn load_primitive( .unwrap(); let pool = device .create_descriptor_pool( - &vk::DescriptorPoolCreateInfo::builder() + &vk::DescriptorPoolCreateInfo::default() .max_sets(1) .pool_sizes(&[vk::DescriptorPoolSize { ty: vk::DescriptorType::COMBINED_IMAGE_SAMPLER, @@ -169,13 +169,13 @@ async fn load_primitive( .unwrap(); let ds = device .allocate_descriptor_sets( - &vk::DescriptorSetAllocateInfo::builder() + &vk::DescriptorSetAllocateInfo::default() .descriptor_pool(pool) .set_layouts(&[ctx.mesh_ds_layout]), ) .unwrap()[0]; device.update_descriptor_sets( - &[vk::WriteDescriptorSet::builder() + &[vk::WriteDescriptorSet::default() .dst_set(ds) .dst_binding(0) .descriptor_type(vk::DescriptorType::COMBINED_IMAGE_SAMPLER) @@ -183,8 +183,7 @@ async fn load_primitive( sampler: vk::Sampler::null(), image_view: color_view, image_layout: vk::ImageLayout::SHADER_READ_ONLY_OPTIMAL, - }]) - .build()], + }])], &[], ); @@ -317,15 +316,14 @@ async fn load_geom( ); xf.stages |= vk::PipelineStageFlags::VERTEX_INPUT; xf.buffer_barriers.push( - vk::BufferMemoryBarrier::builder() + vk::BufferMemoryBarrier::default() .src_access_mask(vk::AccessFlags::TRANSFER_WRITE) .dst_access_mask(vk::AccessFlags::VERTEX_ATTRIBUTE_READ) .src_queue_family_index(xf.queue_family) .dst_queue_family_index(xf.dst_queue_family) .buffer(vert_buffer) .offset(vert_dst_offset) - .size(byte_size as vk::DeviceSize) - .build(), + .size(byte_size as vk::DeviceSize), ); }) }; @@ -352,15 +350,14 @@ async fn load_geom( ); xf.stages |= vk::PipelineStageFlags::VERTEX_INPUT; xf.buffer_barriers.push( - vk::BufferMemoryBarrier::builder() + vk::BufferMemoryBarrier::default() .src_access_mask(vk::AccessFlags::TRANSFER_WRITE) .dst_access_mask(vk::AccessFlags::INDEX_READ) .src_queue_family_index(xf.queue_family) .dst_queue_family_index(xf.dst_queue_family) .buffer(idx_buffer) .offset(idx_dst_offset) - .size(index_count as vk::DeviceSize * 4) - .build(), + .size(index_count as vk::DeviceSize * 4), ); }) }; @@ -434,7 +431,7 @@ async fn load_material( DedicatedImage::new( device, &ctx.gfx.memory_properties, - &vk::ImageCreateInfo::builder() + &vk::ImageCreateInfo::default() .image_type(vk::ImageType::TYPE_2D) .format(vk::Format::R8G8B8A8_SRGB) .extent(vk::Extent3D { @@ -468,15 +465,14 @@ async fn load_material( vk::DependencyFlags::default(), &[], &[], - &[vk::ImageMemoryBarrier::builder() + &[vk::ImageMemoryBarrier::default() .dst_access_mask(vk::AccessFlags::TRANSFER_WRITE) .src_queue_family_index(vk::QUEUE_FAMILY_IGNORED) .dst_queue_family_index(vk::QUEUE_FAMILY_IGNORED) .old_layout(vk::ImageLayout::UNDEFINED) .new_layout(vk::ImageLayout::TRANSFER_DST_OPTIMAL) .image(color_handle) - .subresource_range(range) - .build()], + .subresource_range(range)], ); xf.device.cmd_copy_buffer_to_image( cmd, @@ -501,7 +497,7 @@ async fn load_material( ); xf.stages |= vk::PipelineStageFlags::FRAGMENT_SHADER; xf.image_barriers.push( - vk::ImageMemoryBarrier::builder() + vk::ImageMemoryBarrier::default() .src_access_mask(vk::AccessFlags::TRANSFER_WRITE) .dst_access_mask(vk::AccessFlags::SHADER_READ) .src_queue_family_index(xf.queue_family) @@ -509,8 +505,7 @@ async fn load_material( .old_layout(vk::ImageLayout::TRANSFER_DST_OPTIMAL) .new_layout(vk::ImageLayout::SHADER_READ_ONLY_OPTIMAL) .image(color_handle) - .subresource_range(range) - .build(), + .subresource_range(range), ); }) .await?; @@ -523,7 +518,7 @@ async fn load_solid_color(ctx: &LoadCtx, rgba: [f32; 4]) -> Result Result Result Result() as u32, @@ -95,33 +95,33 @@ impl Meshes { ]), ) .input_assembly_state( - &vk::PipelineInputAssemblyStateCreateInfo::builder() + &vk::PipelineInputAssemblyStateCreateInfo::default() .topology(vk::PrimitiveTopology::TRIANGLE_LIST), ) .viewport_state( - &vk::PipelineViewportStateCreateInfo::builder() + &vk::PipelineViewportStateCreateInfo::default() .scissor_count(1) .viewport_count(1), ) .rasterization_state( - &vk::PipelineRasterizationStateCreateInfo::builder() + &vk::PipelineRasterizationStateCreateInfo::default() .cull_mode(vk::CullModeFlags::BACK) .front_face(vk::FrontFace::COUNTER_CLOCKWISE) .polygon_mode(vk::PolygonMode::FILL) .line_width(1.0), ) .multisample_state( - &vk::PipelineMultisampleStateCreateInfo::builder() + &vk::PipelineMultisampleStateCreateInfo::default() .rasterization_samples(vk::SampleCountFlags::TYPE_1), ) .depth_stencil_state( - &vk::PipelineDepthStencilStateCreateInfo::builder() + &vk::PipelineDepthStencilStateCreateInfo::default() .depth_test_enable(true) .depth_write_enable(true) .depth_compare_op(vk::CompareOp::GREATER), ) .color_blend_state( - &vk::PipelineColorBlendStateCreateInfo::builder().attachments(&[ + &vk::PipelineColorBlendStateCreateInfo::default().attachments(&[ vk::PipelineColorBlendAttachmentState { blend_enable: vk::TRUE, src_color_blend_factor: vk::BlendFactor::ONE, @@ -135,15 +135,14 @@ impl Meshes { ]), ) .dynamic_state( - &vk::PipelineDynamicStateCreateInfo::builder().dynamic_states(&[ + &vk::PipelineDynamicStateCreateInfo::default().dynamic_states(&[ vk::DynamicState::VIEWPORT, vk::DynamicState::SCISSOR, ]), ) .layout(pipeline_layout) .render_pass(gfx.render_pass) - .subpass(0) - .build()], + .subpass(0)], None, ) .unwrap() diff --git a/client/src/graphics/png_array.rs b/client/src/graphics/png_array.rs index a0b8e9c6..6bf9c9a2 100644 --- a/client/src/graphics/png_array.rs +++ b/client/src/graphics/png_array.rs @@ -84,7 +84,7 @@ impl Loadable for PngArray { let image = DedicatedImage::new( &handle.gfx.device, &handle.gfx.memory_properties, - &vk::ImageCreateInfo::builder() + &vk::ImageCreateInfo::default() .image_type(vk::ImageType::TYPE_2D) .format(vk::Format::R8G8B8A8_SRGB) .extent(vk::Extent3D { @@ -119,15 +119,14 @@ impl Loadable for PngArray { vk::DependencyFlags::default(), &[], &[], - &[vk::ImageMemoryBarrier::builder() + &[vk::ImageMemoryBarrier::default() .dst_access_mask(vk::AccessFlags::TRANSFER_WRITE) .src_queue_family_index(vk::QUEUE_FAMILY_IGNORED) .dst_queue_family_index(vk::QUEUE_FAMILY_IGNORED) .old_layout(vk::ImageLayout::UNDEFINED) .new_layout(vk::ImageLayout::TRANSFER_DST_OPTIMAL) .image(dst) - .subresource_range(range) - .build()], + .subresource_range(range)], ); xf.device.cmd_copy_buffer_to_image( cmd, @@ -152,7 +151,7 @@ impl Loadable for PngArray { ); xf.stages |= vk::PipelineStageFlags::FRAGMENT_SHADER; xf.image_barriers.push( - vk::ImageMemoryBarrier::builder() + vk::ImageMemoryBarrier::default() .src_access_mask(vk::AccessFlags::TRANSFER_WRITE) .dst_access_mask(vk::AccessFlags::SHADER_READ) .src_queue_family_index(xf.queue_family) @@ -160,8 +159,7 @@ impl Loadable for PngArray { .old_layout(vk::ImageLayout::TRANSFER_DST_OPTIMAL) .new_layout(vk::ImageLayout::SHADER_READ_ONLY_OPTIMAL) .image(dst) - .subresource_range(range) - .build(), + .subresource_range(range), ); }) .await?; diff --git a/client/src/graphics/voxels/surface.rs b/client/src/graphics/voxels/surface.rs index 6033ee9d..37a91728 100644 --- a/client/src/graphics/voxels/surface.rs +++ b/client/src/graphics/voxels/surface.rs @@ -1,5 +1,3 @@ -use std::ptr; - use ash::{vk, Device}; use lahar::{DedicatedImage, DedicatedMapping}; use vk_shader_macros::include_glsl; @@ -27,25 +25,25 @@ impl Surface { unsafe { // Construct the shader modules let vert = device - .create_shader_module(&vk::ShaderModuleCreateInfo::builder().code(VERT), None) + .create_shader_module(&vk::ShaderModuleCreateInfo::default().code(VERT), None) .unwrap(); // Note that these only need to live until the pipeline itself is constructed let v_guard = defer(|| device.destroy_shader_module(vert, None)); let frag = device - .create_shader_module(&vk::ShaderModuleCreateInfo::builder().code(FRAG), None) + .create_shader_module(&vk::ShaderModuleCreateInfo::default().code(FRAG), None) .unwrap(); let f_guard = defer(|| device.destroy_shader_module(frag, None)); let static_ds_layout = device .create_descriptor_set_layout( - &vk::DescriptorSetLayoutCreateInfo::builder().bindings(&[ + &vk::DescriptorSetLayoutCreateInfo::default().bindings(&[ vk::DescriptorSetLayoutBinding { binding: 0, descriptor_type: vk::DescriptorType::STORAGE_BUFFER, descriptor_count: 1, stage_flags: vk::ShaderStageFlags::VERTEX, - p_immutable_samplers: ptr::null(), + ..Default::default() }, vk::DescriptorSetLayoutBinding { binding: 1, @@ -53,6 +51,7 @@ impl Surface { descriptor_count: 1, stage_flags: vk::ShaderStageFlags::FRAGMENT, p_immutable_samplers: &gfx.linear_sampler, + ..Default::default() }, ]), None, @@ -61,7 +60,7 @@ impl Surface { let descriptor_pool = device .create_descriptor_pool( - &vk::DescriptorPoolCreateInfo::builder() + &vk::DescriptorPoolCreateInfo::default() .max_sets(1) .pool_sizes(&[ vk::DescriptorPoolSize { @@ -78,13 +77,13 @@ impl Surface { .unwrap(); let ds = device .allocate_descriptor_sets( - &vk::DescriptorSetAllocateInfo::builder() + &vk::DescriptorSetAllocateInfo::default() .descriptor_pool(descriptor_pool) .set_layouts(&[static_ds_layout]), ) .unwrap()[0]; device.update_descriptor_sets( - &[vk::WriteDescriptorSet::builder() + &[vk::WriteDescriptorSet::default() .dst_set(ds) .dst_binding(0) .descriptor_type(vk::DescriptorType::STORAGE_BUFFER) @@ -92,15 +91,14 @@ impl Surface { buffer: buffer.face_buffer(), offset: 0, range: vk::WHOLE_SIZE, - }]) - .build()], + }])], &[], ); // Define the outward-facing interface of the shaders, incl. uniforms, samplers, etc. let pipeline_layout = device .create_pipeline_layout( - &vk::PipelineLayoutCreateInfo::builder() + &vk::PipelineLayoutCreateInfo::default() .set_layouts(&[gfx.common_layout, static_ds_layout]) .push_constant_ranges(&[vk::PushConstantRange { stage_flags: vk::ShaderStageFlags::VERTEX, @@ -115,7 +113,7 @@ impl Surface { let mut pipelines = device .create_graphics_pipelines( gfx.pipeline_cache, - &[vk::GraphicsPipelineCreateInfo::builder() + &[vk::GraphicsPipelineCreateInfo::default() .stages(&[ vk::PipelineShaderStageCreateInfo { stage: vk::ShaderStageFlags::VERTEX, @@ -131,7 +129,7 @@ impl Surface { }, ]) .vertex_input_state( - &vk::PipelineVertexInputStateCreateInfo::builder() + &vk::PipelineVertexInputStateCreateInfo::default() .vertex_binding_descriptions(&[vk::VertexInputBindingDescription { binding: 0, stride: TRANSFORM_SIZE as u32, @@ -165,33 +163,33 @@ impl Surface { ]), ) .input_assembly_state( - &vk::PipelineInputAssemblyStateCreateInfo::builder() + &vk::PipelineInputAssemblyStateCreateInfo::default() .topology(vk::PrimitiveTopology::TRIANGLE_LIST), ) .viewport_state( - &vk::PipelineViewportStateCreateInfo::builder() + &vk::PipelineViewportStateCreateInfo::default() .scissor_count(1) .viewport_count(1), ) .rasterization_state( - &vk::PipelineRasterizationStateCreateInfo::builder() + &vk::PipelineRasterizationStateCreateInfo::default() .cull_mode(vk::CullModeFlags::BACK) .front_face(vk::FrontFace::COUNTER_CLOCKWISE) .polygon_mode(vk::PolygonMode::FILL) .line_width(1.0), ) .multisample_state( - &vk::PipelineMultisampleStateCreateInfo::builder() + &vk::PipelineMultisampleStateCreateInfo::default() .rasterization_samples(vk::SampleCountFlags::TYPE_1), ) .depth_stencil_state( - &vk::PipelineDepthStencilStateCreateInfo::builder() + &vk::PipelineDepthStencilStateCreateInfo::default() .depth_test_enable(true) .depth_write_enable(true) .depth_compare_op(vk::CompareOp::GREATER), ) .color_blend_state( - &vk::PipelineColorBlendStateCreateInfo::builder().attachments(&[ + &vk::PipelineColorBlendStateCreateInfo::default().attachments(&[ vk::PipelineColorBlendAttachmentState { blend_enable: vk::TRUE, src_color_blend_factor: vk::BlendFactor::ONE, @@ -205,15 +203,14 @@ impl Surface { ]), ) .dynamic_state( - &vk::PipelineDynamicStateCreateInfo::builder().dynamic_states(&[ + &vk::PipelineDynamicStateCreateInfo::default().dynamic_states(&[ vk::DynamicState::VIEWPORT, vk::DynamicState::SCISSOR, ]), ) .layout(pipeline_layout) .render_pass(gfx.render_pass) - .subpass(0) - .build()], + .subpass(0)], None, ) .unwrap() @@ -260,7 +257,7 @@ impl Surface { if let Some(colors) = loader.get(self.colors) { self.colors_view = device .create_image_view( - &vk::ImageViewCreateInfo::builder() + &vk::ImageViewCreateInfo::default() .image(colors.handle) .view_type(vk::ImageViewType::TYPE_2D_ARRAY) .format(vk::Format::R8G8B8A8_SRGB) @@ -275,7 +272,7 @@ impl Surface { ) .unwrap(); device.update_descriptor_sets( - &[vk::WriteDescriptorSet::builder() + &[vk::WriteDescriptorSet::default() .dst_set(self.ds) .dst_binding(1) .descriptor_type(vk::DescriptorType::COMBINED_IMAGE_SAMPLER) @@ -283,8 +280,7 @@ impl Surface { sampler: vk::Sampler::null(), image_view: self.colors_view, image_layout: vk::ImageLayout::SHADER_READ_ONLY_OPTIMAL, - }]) - .build()], + }])], &[], ); } else { diff --git a/client/src/graphics/voxels/surface_extraction.rs b/client/src/graphics/voxels/surface_extraction.rs index 4f21bd6e..770eebc8 100644 --- a/client/src/graphics/voxels/surface_extraction.rs +++ b/client/src/graphics/voxels/surface_extraction.rs @@ -1,5 +1,5 @@ use std::ffi::c_char; -use std::{mem, ptr}; +use std::mem; use ash::{vk, Device}; use lahar::{DedicatedBuffer, DedicatedMapping}; @@ -24,13 +24,13 @@ impl SurfaceExtraction { unsafe { let params_layout = device .create_descriptor_set_layout( - &vk::DescriptorSetLayoutCreateInfo::builder().bindings(&[ + &vk::DescriptorSetLayoutCreateInfo::default().bindings(&[ vk::DescriptorSetLayoutBinding { binding: 0, descriptor_type: vk::DescriptorType::UNIFORM_BUFFER, descriptor_count: 1, stage_flags: vk::ShaderStageFlags::COMPUTE, - p_immutable_samplers: ptr::null(), + ..Default::default() }, ]), None, @@ -38,34 +38,34 @@ impl SurfaceExtraction { .unwrap(); let ds_layout = device .create_descriptor_set_layout( - &vk::DescriptorSetLayoutCreateInfo::builder().bindings(&[ + &vk::DescriptorSetLayoutCreateInfo::default().bindings(&[ vk::DescriptorSetLayoutBinding { binding: 0, descriptor_type: vk::DescriptorType::STORAGE_BUFFER, descriptor_count: 1, stage_flags: vk::ShaderStageFlags::COMPUTE, - p_immutable_samplers: ptr::null(), + ..Default::default() }, vk::DescriptorSetLayoutBinding { binding: 1, descriptor_type: vk::DescriptorType::STORAGE_BUFFER, descriptor_count: 1, stage_flags: vk::ShaderStageFlags::COMPUTE, - p_immutable_samplers: ptr::null(), + ..Default::default() }, vk::DescriptorSetLayoutBinding { binding: 2, descriptor_type: vk::DescriptorType::STORAGE_BUFFER, descriptor_count: 1, stage_flags: vk::ShaderStageFlags::COMPUTE, - p_immutable_samplers: ptr::null(), + ..Default::default() }, vk::DescriptorSetLayoutBinding { binding: 3, descriptor_type: vk::DescriptorType::STORAGE_BUFFER, descriptor_count: 1, stage_flags: vk::ShaderStageFlags::COMPUTE, - p_immutable_samplers: ptr::null(), + ..Default::default() }, ]), None, @@ -73,7 +73,7 @@ impl SurfaceExtraction { .unwrap(); let pipeline_layout = device .create_pipeline_layout( - &vk::PipelineLayoutCreateInfo::builder() + &vk::PipelineLayoutCreateInfo::default() .set_layouts(&[params_layout, ds_layout]) .push_constant_ranges(&[vk::PushConstantRange { stage_flags: vk::ShaderStageFlags::COMPUTE, @@ -85,7 +85,7 @@ impl SurfaceExtraction { .unwrap(); let extract = device - .create_shader_module(&vk::ShaderModuleCreateInfo::builder().code(EXTRACT), None) + .create_shader_module(&vk::ShaderModuleCreateInfo::default().code(EXTRACT), None) .unwrap(); let extract_guard = defer(|| device.destroy_shader_module(extract, None)); @@ -106,7 +106,7 @@ impl SurfaceExtraction { size: 4, }, ]; - let specialization = vk::SpecializationInfo::builder() + let specialization = vk::SpecializationInfo::default() .map_entries(&specialization_map_entries) .data(as_bytes(&WORKGROUP_SIZE)); @@ -119,7 +119,7 @@ impl SurfaceExtraction { stage: vk::ShaderStageFlags::COMPUTE, module: extract, p_name, - p_specialization_info: &*specialization, + p_specialization_info: &specialization, ..Default::default() }, layout: pipeline_layout, @@ -187,7 +187,7 @@ impl ScratchBuffer { let params = DedicatedBuffer::new( device, &gfx.memory_properties, - &vk::BufferCreateInfo::builder() + &vk::BufferCreateInfo::default() .size(mem::size_of::() as vk::DeviceSize) .usage( vk::BufferUsageFlags::UNIFORM_BUFFER | vk::BufferUsageFlags::TRANSFER_DST, @@ -208,7 +208,7 @@ impl ScratchBuffer { let voxels = DedicatedBuffer::new( device, &gfx.memory_properties, - &vk::BufferCreateInfo::builder() + &vk::BufferCreateInfo::default() .size(voxels_size) .usage( vk::BufferUsageFlags::STORAGE_BUFFER | vk::BufferUsageFlags::TRANSFER_DST, @@ -221,7 +221,7 @@ impl ScratchBuffer { let state = DedicatedBuffer::new( device, &gfx.memory_properties, - &vk::BufferCreateInfo::builder() + &vk::BufferCreateInfo::default() .size(state_buffer_unit * vk::DeviceSize::from(concurrency)) .usage( vk::BufferUsageFlags::STORAGE_BUFFER | vk::BufferUsageFlags::TRANSFER_DST, @@ -233,7 +233,7 @@ impl ScratchBuffer { let descriptor_pool = device .create_descriptor_pool( - &vk::DescriptorPoolCreateInfo::builder() + &vk::DescriptorPoolCreateInfo::default() .max_sets(concurrency + 1) .pool_sizes(&[ vk::DescriptorPoolSize { @@ -253,7 +253,7 @@ impl ScratchBuffer { layouts.push(ctx.params_layout); let mut descriptor_sets = device .allocate_descriptor_sets( - &vk::DescriptorSetAllocateInfo::builder() + &vk::DescriptorSetAllocateInfo::default() .descriptor_pool(descriptor_pool) .set_layouts(&layouts), ) @@ -261,7 +261,7 @@ impl ScratchBuffer { let params_ds = descriptor_sets.pop().unwrap(); device.update_descriptor_sets( - &[vk::WriteDescriptorSet::builder() + &[vk::WriteDescriptorSet::default() .dst_set(params_ds) .dst_binding(0) .descriptor_type(vk::DescriptorType::UNIFORM_BUFFER) @@ -269,8 +269,7 @@ impl ScratchBuffer { buffer: params.handle, offset: 0, range: vk::WHOLE_SIZE, - }]) - .build()], + }])], &[], ); @@ -373,7 +372,7 @@ impl ScratchBuffer { device.update_descriptor_sets( &[ - vk::WriteDescriptorSet::builder() + vk::WriteDescriptorSet::default() .dst_set(self.descriptor_sets[index]) .dst_binding(0) .descriptor_type(vk::DescriptorType::STORAGE_BUFFER) @@ -381,9 +380,8 @@ impl ScratchBuffer { buffer: self.voxels.handle, offset: voxels_offset, range: voxels_range, - }]) - .build(), - vk::WriteDescriptorSet::builder() + }]), + vk::WriteDescriptorSet::default() .dst_set(self.descriptor_sets[index]) .dst_binding(1) .descriptor_type(vk::DescriptorType::STORAGE_BUFFER) @@ -391,9 +389,8 @@ impl ScratchBuffer { buffer: self.state.handle, offset: self.state_buffer_unit * vk::DeviceSize::from(task.index), range: 4, - }]) - .build(), - vk::WriteDescriptorSet::builder() + }]), + vk::WriteDescriptorSet::default() .dst_set(self.descriptor_sets[index]) .dst_binding(2) .descriptor_type(vk::DescriptorType::STORAGE_BUFFER) @@ -401,9 +398,8 @@ impl ScratchBuffer { buffer: indirect_buffer, offset: task.indirect_offset, range: INDIRECT_SIZE, - }]) - .build(), - vk::WriteDescriptorSet::builder() + }]), + vk::WriteDescriptorSet::default() .dst_set(self.descriptor_sets[index]) .dst_binding(3) .descriptor_type(vk::DescriptorType::STORAGE_BUFFER) @@ -411,8 +407,7 @@ impl ScratchBuffer { buffer: face_buffer, offset: task.face_offset, range: max_faces as vk::DeviceSize * FACE_SIZE, - }]) - .build(), + }]), ], &[], ); @@ -557,7 +552,7 @@ impl DrawBuffer { let indirect = DedicatedBuffer::new( device, &gfx.memory_properties, - &vk::BufferCreateInfo::builder() + &vk::BufferCreateInfo::default() .size(count as vk::DeviceSize * INDIRECT_SIZE) .usage( vk::BufferUsageFlags::STORAGE_BUFFER @@ -572,7 +567,7 @@ impl DrawBuffer { let faces = DedicatedBuffer::new( device, &gfx.memory_properties, - &vk::BufferCreateInfo::builder() + &vk::BufferCreateInfo::default() .size(face_buffer_size) .usage(vk::BufferUsageFlags::STORAGE_BUFFER) .sharing_mode(vk::SharingMode::EXCLUSIVE), diff --git a/client/src/graphics/voxels/tests.rs b/client/src/graphics/voxels/tests.rs index e4c4ea3d..996d2c79 100644 --- a/client/src/graphics/voxels/tests.rs +++ b/client/src/graphics/voxels/tests.rs @@ -43,7 +43,7 @@ impl SurfaceExtractionTest { let cmd_pool = device .create_command_pool( - &vk::CommandPoolCreateInfo::builder() + &vk::CommandPoolCreateInfo::default() .queue_family_index(gfx.queue_family) .flags(vk::CommandPoolCreateFlags::RESET_COMMAND_BUFFER), None, @@ -52,7 +52,7 @@ impl SurfaceExtractionTest { let cmd = device .allocate_command_buffers( - &vk::CommandBufferAllocateInfo::builder() + &vk::CommandBufferAllocateInfo::default() .command_pool(cmd_pool) .command_buffer_count(1), ) @@ -82,7 +82,7 @@ impl SurfaceExtractionTest { device .begin_command_buffer( self.cmd, - &vk::CommandBufferBeginInfo::builder() + &vk::CommandBufferBeginInfo::default() .flags(vk::CommandBufferUsageFlags::ONE_TIME_SUBMIT), ) .unwrap(); @@ -106,9 +106,7 @@ impl SurfaceExtractionTest { device .queue_submit( self.gfx.queue, - &[vk::SubmitInfo::builder() - .command_buffers(&[self.cmd]) - .build()], + &[vk::SubmitInfo::default().command_buffers(&[self.cmd])], vk::Fence::null(), ) .unwrap(); diff --git a/client/src/graphics/window.rs b/client/src/graphics/window.rs index adcf2298..866726c2 100644 --- a/client/src/graphics/window.rs +++ b/client/src/graphics/window.rs @@ -2,9 +2,9 @@ use std::sync::Arc; use std::time::Instant; use std::{f32, os::raw::c_char}; -use ash::{extensions::khr, vk}; +use ash::{khr, vk}; use lahar::DedicatedImage; -use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle}; +use raw_window_handle::{HasDisplayHandle, HasWindowHandle}; use tracing::{error, info}; use winit::event::KeyEvent; use winit::keyboard::{KeyCode, PhysicalKey}; @@ -37,8 +37,10 @@ impl EarlyWindow { /// Identify the Vulkan extension needed to render to this window pub fn required_extensions(&self) -> &'static [*const c_char] { - ash_window::enumerate_required_extensions(self.event_loop.raw_display_handle()) - .expect("unsupported platform") + ash_window::enumerate_required_extensions( + self.event_loop.display_handle().unwrap().as_raw(), + ) + .expect("unsupported platform") } } @@ -49,7 +51,7 @@ pub struct Window { config: Arc, metrics: Arc, event_loop: Option>, - surface_fn: khr::Surface, + surface_fn: khr::surface::Instance, surface: vk::SurfaceKHR, swapchain: Option, swapchain_needs_update: bool, @@ -71,13 +73,13 @@ impl Window { ash_window::create_surface( &core.entry, &core.instance, - early.window.raw_display_handle(), - early.window.raw_window_handle(), + early.window.display_handle().unwrap().as_raw(), + early.window.window_handle().unwrap().as_raw(), None, ) .unwrap() }; - let surface_fn = khr::Surface::new(&core.entry, &core.instance); + let surface_fn = khr::surface::Instance::new(&core.entry, &core.instance); Self { _core: core, @@ -403,7 +405,7 @@ impl SwapchainMgr { /// Construct a swapchain manager for a certain window fn new(window: &Window, gfx: Arc, fallback_size: PhysicalSize) -> Self { let device = &*gfx.device; - let swapchain_fn = khr::Swapchain::new(&gfx.core.instance, device); + let swapchain_fn = khr::swapchain::Device::new(&gfx.core.instance, device); let surface_formats = unsafe { window .surface_fn @@ -449,7 +451,7 @@ impl SwapchainMgr { /// - There must be no operations scheduled that access the current swapchain unsafe fn update( &mut self, - surface_fn: &khr::Surface, + surface_fn: &khr::surface::Instance, surface: vk::SurfaceKHR, fallback_size: PhysicalSize, ) { @@ -478,7 +480,7 @@ impl SwapchainMgr { unsafe fn queue_present(&self, index: u32) -> Result { self.state.swapchain_fn.queue_present( self.state.gfx.queue, - &vk::PresentInfoKHR::builder() + &vk::PresentInfoKHR::default() .wait_semaphores(&[self.state.frames[index as usize].present]) .swapchains(&[self.state.handle]) .image_indices(&[index]), @@ -489,7 +491,7 @@ impl SwapchainMgr { /// Data that's replaced when the swapchain is updated struct SwapchainState { gfx: Arc, - swapchain_fn: khr::Swapchain, + swapchain_fn: khr::swapchain::Device, extent: vk::Extent2D, handle: vk::SwapchainKHR, frames: Vec, @@ -497,8 +499,8 @@ struct SwapchainState { impl SwapchainState { unsafe fn new( - surface_fn: &khr::Surface, - swapchain_fn: khr::Swapchain, + surface_fn: &khr::surface::Instance, + swapchain_fn: khr::swapchain::Device, gfx: Arc, surface: vk::SurfaceKHR, format: vk::SurfaceFormatKHR, @@ -545,7 +547,7 @@ impl SwapchainState { let handle = swapchain_fn .create_swapchain( - &vk::SwapchainCreateInfoKHR::builder() + &vk::SwapchainCreateInfoKHR::default() .surface(surface) .min_image_count(image_count) .image_color_space(format.color_space) @@ -570,7 +572,7 @@ impl SwapchainState { .map(|image| { let view = device .create_image_view( - &vk::ImageViewCreateInfo::builder() + &vk::ImageViewCreateInfo::default() .view_type(vk::ImageViewType::TYPE_2D) .format(format.format) .subresource_range(vk::ImageSubresourceRange { @@ -588,7 +590,7 @@ impl SwapchainState { let depth = DedicatedImage::new( device, &gfx.memory_properties, - &vk::ImageCreateInfo::builder() + &vk::ImageCreateInfo::default() .image_type(vk::ImageType::TYPE_2D) .format(vk::Format::D32_SFLOAT) .extent(vk::Extent3D { @@ -608,7 +610,7 @@ impl SwapchainState { gfx.set_name(depth.memory, cstr!("depth")); let depth_view = device .create_image_view( - &vk::ImageViewCreateInfo::builder() + &vk::ImageViewCreateInfo::default() .image(depth.handle) .view_type(vk::ImageViewType::TYPE_2D) .format(vk::Format::D32_SFLOAT) @@ -631,7 +633,7 @@ impl SwapchainState { depth_view, buffer: device .create_framebuffer( - &vk::FramebufferCreateInfo::builder() + &vk::FramebufferCreateInfo::default() .render_pass(gfx.render_pass) .attachments(&[view, depth_view]) .width(extent.width) diff --git a/client/src/lahar_deprecated/transfer.rs b/client/src/lahar_deprecated/transfer.rs index 99d1e687..aba2f6e0 100644 --- a/client/src/lahar_deprecated/transfer.rs +++ b/client/src/lahar_deprecated/transfer.rs @@ -37,8 +37,8 @@ pub struct TransferContext { /// May be equal to queue_family pub dst_queue_family: u32, pub stages: vk::PipelineStageFlags, - pub buffer_barriers: Vec, - pub image_barriers: Vec, + pub buffer_barriers: Vec>, + pub image_barriers: Vec>, } #[derive(Debug, Copy, Clone)] @@ -82,7 +82,7 @@ impl Reactor { let (send, recv) = mpsc::unbounded_channel(); let cmd_pool = device .create_command_pool( - &vk::CommandPoolCreateInfo::builder() + &vk::CommandPoolCreateInfo::default() .queue_family_index(queue_family) .flags(vk::CommandPoolCreateFlags::RESET_COMMAND_BUFFER), None, @@ -185,7 +185,7 @@ impl Reactor { self.ctx .device .allocate_command_buffers( - &vk::CommandBufferAllocateInfo::builder() + &vk::CommandBufferAllocateInfo::default() .command_pool(self.cmd_pool) .command_buffer_count(1), ) @@ -200,7 +200,7 @@ impl Reactor { .device .begin_command_buffer( cmd, - &vk::CommandBufferBeginInfo::builder() + &vk::CommandBufferBeginInfo::default() .flags(vk::CommandBufferUsageFlags::ONE_TIME_SUBMIT), ) .unwrap(); @@ -242,9 +242,7 @@ impl Reactor { device .queue_submit( self.queue, - &[vk::SubmitInfo::builder() - .command_buffers(&[pending.cmd]) - .build()], + &[vk::SubmitInfo::default().command_buffers(&[pending.cmd])], fence, ) .unwrap(); diff --git a/client/src/loader.rs b/client/src/loader.rs index 02a7ff3c..6ed91a9f 100644 --- a/client/src/loader.rs +++ b/client/src/loader.rs @@ -80,13 +80,14 @@ impl Loader { let mesh_ds_layout = unsafe { gfx.device .create_descriptor_set_layout( - &vk::DescriptorSetLayoutCreateInfo::builder().bindings(&[ + &vk::DescriptorSetLayoutCreateInfo::default().bindings(&[ vk::DescriptorSetLayoutBinding { binding: 0, descriptor_type: vk::DescriptorType::COMBINED_IMAGE_SAMPLER, descriptor_count: 1, stage_flags: vk::ShaderStageFlags::FRAGMENT, p_immutable_samplers: &gfx.linear_sampler, + ..vk::DescriptorSetLayoutBinding::default() }, ]), None, diff --git a/client/src/main.rs b/client/src/main.rs index ff0b81bd..916ece08 100644 --- a/client/src/main.rs +++ b/client/src/main.rs @@ -6,7 +6,7 @@ use std::{ use client::{graphics, metrics, net, Config}; use save::Save; -use ash::extensions::khr; +use ash::khr; use tracing::{error, error_span, info}; fn main() { @@ -74,7 +74,7 @@ fn main() { graphics::Base::new( core, Some(dirs.cache_dir().join("pipeline_cache")), - &[khr::Swapchain::name()], + &[khr::swapchain::NAME], |physical, queue_family| window.supports(physical, queue_family), ) .unwrap(), diff --git a/shell.nix b/shell.nix index 527dc4bb..4b34571c 100644 --- a/shell.nix +++ b/shell.nix @@ -4,7 +4,7 @@ let nixpkgs = import { overlays = [ moz_overlay ]; }; in with nixpkgs; let - dlopen-libs = with xorg; [ vulkan-loader libX11 libXcursor libXrandr libXi ]; + dlopen-libs = with xorg; [ vulkan-loader libX11 libXcursor libXrandr libXi libxkbcommon ]; in mkShell.override { stdenv = pkgs.stdenvAdapters.useMoldLinker pkgs.stdenv; } {