@@ -4,7 +4,6 @@ use anyhow::Result;
44use ash:: vk;
55use glam:: { Mat4 , Vec3 } ;
66use log:: { info, trace} ;
7-
87use phobos:: graph:: pass:: ClearColor ;
98use phobos:: image;
109use phobos:: pipeline:: raytracing:: RayTracingPipelineBuilder ;
@@ -15,7 +14,7 @@ use phobos::sync::submit_batch::SubmitBatch;
1514use phobos:: util:: align:: align;
1615
1716use crate :: example_runner:: {
18- Context , create_shader , ExampleApp , ExampleRunner , load_spirv_file , WindowContext ,
17+ create_shader , load_spirv_file , Context , ExampleApp , ExampleRunner , WindowContext ,
1918} ;
2019
2120#[ path = "../example_runner/lib.rs" ]
@@ -42,7 +41,6 @@ struct RaytracingSample {
4241fn make_input_buffer < T : Copy > (
4342 ctx : & mut Context ,
4443 data : & [ T ] ,
45- usage : vk:: BufferUsageFlags ,
4644 alignment : Option < u64 > ,
4745 name : & str ,
4846) -> Result < Buffer > {
@@ -51,19 +49,13 @@ fn make_input_buffer<T: Copy>(
5149 ctx. device . clone ( ) ,
5250 & mut ctx. allocator ,
5351 ( data. len ( ) * std:: mem:: size_of :: < T > ( ) ) as u64 ,
54- vk:: BufferUsageFlags :: ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_KHR
55- | vk:: BufferUsageFlags :: TRANSFER_DST
56- | usage,
5752 MemoryType :: CpuToGpu ,
5853 ) ?,
5954 Some ( alignment) => Buffer :: new_aligned (
6055 ctx. device . clone ( ) ,
6156 & mut ctx. allocator ,
6257 ( data. len ( ) * std:: mem:: size_of :: < T > ( ) ) as u64 ,
6358 alignment,
64- vk:: BufferUsageFlags :: ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_KHR
65- | vk:: BufferUsageFlags :: TRANSFER_DST
66- | usage,
6759 MemoryType :: CpuToGpu ,
6860 ) ?,
6961 } ;
@@ -80,12 +72,12 @@ fn make_vertex_buffer(ctx: &mut Context) -> Result<Buffer> {
8072 -1.0 , -1.0 , 1.0 , 1.0 , -1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , 1.0 , -1.0 , 1.0 , 1.0 , -1.0 , -1.0 ,
8173 1.0 ,
8274 ] ;
83- make_input_buffer ( ctx, & vertices, vk :: BufferUsageFlags :: VERTEX_BUFFER , None , "Vertex Buffer" )
75+ make_input_buffer ( ctx, & vertices, None , "Vertex Buffer" )
8476}
8577
8678fn make_index_buffer ( ctx : & mut Context ) -> Result < Buffer > {
8779 let indices = ( 0 ..=5 ) . collect :: < Vec < u32 > > ( ) ;
88- make_input_buffer ( ctx, indices. as_slice ( ) , vk :: BufferUsageFlags :: INDEX_BUFFER , None , "Index Buffer" )
80+ make_input_buffer ( ctx, indices. as_slice ( ) , None , "Index Buffer" )
8981}
9082
9183fn make_instance_buffer ( ctx : & mut Context , blas : & AccelerationStructure ) -> Result < Buffer > {
@@ -99,7 +91,7 @@ fn make_instance_buffer(ctx: &mut Context, blas: &AccelerationStructure) -> Resu
9991 . acceleration_structure ( & blas, AccelerationStructureBuildType :: Device ) ?;
10092 // The Vulkan spec states: For any element of pInfos[i].pGeometries or pInfos[i].ppGeometries with a geometryType of VK_GEOMETRY_TYPE_INSTANCES_KHR,
10193 // if geometry.arrayOfPointers is VK_FALSE, geometry.instances.data.deviceAddress must be aligned to 16 bytes
102- make_input_buffer ( ctx, std:: slice:: from_ref ( & instance) , Default :: default ( ) , Some ( 16 ) , "Instance Buffer" )
94+ make_input_buffer ( ctx, std:: slice:: from_ref ( & instance) , Some ( 16 ) , "Instance Buffer" )
10395}
10496
10597fn blas_build_info < ' a > ( vertices : & Buffer , indices : & Buffer ) -> AccelerationStructureBuildInfo < ' a > {
@@ -148,19 +140,10 @@ fn make_acceleration_structure(
148140 build_info,
149141 prim_counts,
150142 ) ?;
151- let buffer = Buffer :: new_device_local (
152- ctx. device . clone ( ) ,
153- & mut ctx. allocator ,
154- sizes. size ,
155- vk:: BufferUsageFlags :: ACCELERATION_STRUCTURE_STORAGE_KHR ,
156- ) ?;
143+ let buffer = Buffer :: new_device_local ( ctx. device . clone ( ) , & mut ctx. allocator , sizes. size ) ?;
157144 // Allocate scratch buffer for building the acceleration structure
158- let scratch_buffer = Buffer :: new_device_local (
159- ctx. device . clone ( ) ,
160- & mut ctx. allocator ,
161- sizes. build_scratch_size ,
162- vk:: BufferUsageFlags :: STORAGE_BUFFER ,
163- ) ?;
145+ let scratch_buffer =
146+ Buffer :: new_device_local ( ctx. device . clone ( ) , & mut ctx. allocator , sizes. build_scratch_size ) ?;
164147 let acceleration_structure = AccelerationStructure :: new (
165148 ctx. device . clone ( ) ,
166149 build_info. ty ( ) ,
@@ -182,12 +165,7 @@ fn make_compacted(
182165 size : u64 ,
183166) -> Result < ( AccelerationStructure , Buffer ) > {
184167 // Create final compacted acceleration structures
185- let compact_buffer = Buffer :: new_device_local (
186- ctx. device . clone ( ) ,
187- & mut ctx. allocator ,
188- size,
189- vk:: BufferUsageFlags :: ACCELERATION_STRUCTURE_STORAGE_KHR ,
190- ) ?;
168+ let compact_buffer = Buffer :: new_device_local ( ctx. device . clone ( ) , & mut ctx. allocator , size) ?;
191169 let compact_as = AccelerationStructure :: new (
192170 ctx. device . clone ( ) ,
193171 accel. ty ( ) ,
@@ -361,12 +339,12 @@ impl ExampleApp for RaytracingSample {
361339 let render_pass = PassBuilder :: render ( "copy" )
362340 . clear_color_attachment ( & swap, ClearColor :: Float ( [ 0.0 , 0.0 , 0.0 , 0.0 ] ) ) ?
363341 . sample_image ( rt_pass. output ( & rt_image) . unwrap ( ) , PipelineStage :: FRAGMENT_SHADER )
364- . execute_fn ( |cmd, ifc , bindings, _| {
342+ . execute_fn ( |cmd, pool , bindings, _| {
365343 let vertices: Vec < f32 > = vec ! [
366344 -1.0 , 1.0 , 0.0 , 1.0 , -1.0 , -1.0 , 0.0 , 0.0 , 1.0 , -1.0 , 1.0 , 0.0 , -1.0 , 1.0 , 0.0 ,
367345 1.0 , 1.0 , -1.0 , 1.0 , 0.0 , 1.0 , 1.0 , 1.0 , 1.0 ,
368346 ] ;
369- let mut vtx_buffer = ifc . allocate_scratch_vbo (
347+ let mut vtx_buffer = pool . allocate_scratch_buffer (
370348 ( vertices. len ( ) * std:: mem:: size_of :: < f32 > ( ) ) as vk:: DeviceSize ,
371349 ) ?;
372350 let slice = vtx_buffer. mapped_slice :: < f32 > ( ) ?;
0 commit comments