From a4410015d3230415a0487f1acbd35ad3015dbb8d Mon Sep 17 00:00:00 2001 From: Josh Simmons Date: Mon, 3 Jun 2024 22:40:42 +0200 Subject: [PATCH] narcissus-gpu: Hook up buffer device address --- .../src/backend/vulkan/allocator.rs | 7 +++++++ .../narcissus-gpu/src/backend/vulkan/mod.rs | 19 +++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/engine/narcissus-gpu/src/backend/vulkan/allocator.rs b/engine/narcissus-gpu/src/backend/vulkan/allocator.rs index 72bdc14..bd717f8 100644 --- a/engine/narcissus-gpu/src/backend/vulkan/allocator.rs +++ b/engine/narcissus-gpu/src/backend/vulkan/allocator.rs @@ -1,5 +1,6 @@ use std::{ collections::HashSet, + ffi::c_void, sync::atomic::{AtomicU32, AtomicU64, Ordering}, }; @@ -252,7 +253,13 @@ impl VulkanDevice { return None; } + let flags_info = vk::MemoryAllocateFlagsInfo { + flags: vk::MemoryAllocateFlags::DEVICE_ADDRESS_BIT, + ..default() + }; + let mut allocate_info = vk::MemoryAllocateInfo { + _next: &flags_info as *const _ as *const c_void, allocation_size: size, memory_type_index, ..default() diff --git a/engine/narcissus-gpu/src/backend/vulkan/mod.rs b/engine/narcissus-gpu/src/backend/vulkan/mod.rs index 4b89dc6..09b14bb 100644 --- a/engine/narcissus-gpu/src/backend/vulkan/mod.rs +++ b/engine/narcissus-gpu/src/backend/vulkan/mod.rs @@ -183,6 +183,7 @@ fn vulkan_shader_module( struct VulkanBuffer { memory: VulkanMemory, buffer: vk::Buffer, + _address: vk::DeviceAddress, map_count: u64, } @@ -624,6 +625,7 @@ impl VulkanDevice { }; let enabled_features_12 = vk::PhysicalDeviceVulkan12Features { _next: &enabled_features_13 as *const vk::PhysicalDeviceVulkan13Features as *mut _, + buffer_device_address: vk::Bool32::True, timeline_semaphore: vk::Bool32::True, descriptor_indexing: vk::Bool32::True, descriptor_binding_partially_bound: vk::Bool32::True, @@ -911,7 +913,8 @@ impl Device for VulkanDevice { let create_info = vk::BufferCreateInfo { size: desc.size as u64, - usage: vulkan_buffer_usage_flags(desc.usage), + usage: vulkan_buffer_usage_flags(desc.usage) + | vk::BufferUsageFlags::SHADER_DEVICE_ADDRESS, queue_family_indices: queue_family_indices.into(), sharing_mode: vk::SharingMode::Exclusive, ..default() @@ -940,9 +943,20 @@ impl Device for VulkanDevice { ) }; + let address = unsafe { + self.device_fn.get_buffer_device_address( + self.device, + &vk::BufferDeviceAddressInfo { + buffer, + ..default() + }, + ) + }; + let handle = self.buffer_pool.lock().insert(VulkanBuffer { memory, buffer, + _address: address, map_count: 0, }); @@ -2619,7 +2633,8 @@ impl VulkanDevice { | vk::BufferUsageFlags::TRANSFER_SRC | vk::BufferUsageFlags::INDEX_BUFFER | vk::BufferUsageFlags::STORAGE_BUFFER - | vk::BufferUsageFlags::UNIFORM_BUFFER, + | vk::BufferUsageFlags::UNIFORM_BUFFER + | vk::BufferUsageFlags::SHADER_DEVICE_ADDRESS, queue_family_indices: queue_family_indices.into(), sharing_mode: vk::SharingMode::Exclusive, ..default() -- 2.49.0