Guest User

Untitled

a guest
Jan 16th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. unsafe fn create_io_buffers(
  2. adapter: &mut Adapter<back::Backend>,
  3. device: &<back::Backend as Backend>::Device,
  4. ) -> (
  5. u32,
  6. u32,
  7. <back::Backend as Backend>::Memory,
  8. <back::Backend as Backend>::Buffer,
  9. *mut u8,
  10. <back::Backend as Backend>::Buffer,
  11. *mut u8,
  12. ) {
  13. let buffer_length: u32 = 16384;
  14. let buffer_size: u32 = (mem::size_of::<i32>() as u32) * buffer_length;
  15. let memory_size: u64 = 2 * (buffer_size as u64);
  16.  
  17. let mut in_buffer = device
  18. .create_buffer(buffer_size as u64, buffer::Usage::STORAGE)
  19. .unwrap();
  20. let mut out_buffer = device
  21. .create_buffer(buffer_size as u64, buffer::Usage::STORAGE)
  22. .unwrap();
  23.  
  24. let in_buffer_req = device.get_buffer_requirements(&in_buffer);
  25. let out_buffer_req = device.get_buffer_requirements(&out_buffer);
  26.  
  27. let memory_properties = adapter.physical_device.memory_properties();
  28.  
  29. let memory_type_id: hal::MemoryTypeId = memory_properties
  30. .memory_types
  31. .iter()
  32. .enumerate()
  33. .position(|(id, mem_type)| {
  34. mem_type
  35. .properties
  36. .contains(memory::Properties::CPU_VISIBLE | memory::Properties::COHERENT)
  37. && in_buffer_req.type_mask & (1 << id) != 0
  38. && out_buffer_req.type_mask & (1 << id) != 0
  39. && memory_size < memory_properties.memory_heaps[mem_type.heap_index]
  40. })
  41. .unwrap()
  42. .into();
  43.  
  44. let memory = device
  45. .allocate_memory(memory_type_id, memory_size)
  46. .unwrap();
  47.  
  48. device
  49. .bind_buffer_memory(&memory, 0, &mut in_buffer)
  50. .unwrap();
  51. device
  52. .bind_buffer_memory(&memory, buffer_size as u64, &mut out_buffer)
  53. .unwrap();
  54.  
  55. let payload = device
  56. .map_memory(&memory, (0 as u64)..(buffer_size as u64))
  57. .unwrap();
  58. let result = device
  59. .map_memory(&memory, (buffer_size as u64)..(memory_size as u64))
  60. .unwrap();
  61.  
  62. (
  63. buffer_length,
  64. buffer_size,
  65. memory,
  66. in_buffer,
  67. payload,
  68. out_buffer,
  69. result,
  70. )
  71. }
Add Comment
Please, Sign In to add comment