Add helper for fetching GPUBuffer address

This commit is contained in:
baldurk
2025-01-31 15:34:14 +00:00
parent 025f1c6b01
commit 07396bb1b8
2 changed files with 19 additions and 0 deletions
+15
View File
@@ -267,6 +267,20 @@ void GPUBuffer::Create(WrappedVulkan *driver, VkDevice dev, VkDeviceSize size, u
vkr = ObjDisp(dev)->BindBufferMemory(Unwrap(dev), buf, mem, 0);
CHECK_VKR(driver, vkr);
if(flags & eGPUBufferAddressable)
{
RDCCOMPILE_ASSERT(VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO ==
VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT,
"KHR and EXT buffer_device_address should be interchangeable here.");
VkBufferDeviceAddressInfo getAddressInfo = {VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, NULL,
buf};
if(useBufferAddressKHR)
addr = ObjDisp(dev)->GetBufferDeviceAddress(Unwrap(dev), &getAddressInfo);
else
addr = ObjDisp(dev)->GetBufferDeviceAddressEXT(Unwrap(dev), &getAddressInfo);
}
}
void GPUBuffer::FillDescriptor(VkDescriptorBufferInfo &desc)
@@ -283,6 +297,7 @@ void GPUBuffer::Destroy()
ObjDisp(device)->DestroyBuffer(Unwrap(device), buf, NULL);
ObjDisp(device)->FreeMemory(Unwrap(device), mem, NULL);
}
addr = 0;
}
void *GPUBuffer::Map(uint32_t *bindoffset, VkDeviceSize usedsize)
+4
View File
@@ -221,6 +221,8 @@ struct GPUBuffer
void FillDescriptor(VkDescriptorBufferInfo &desc);
VkDeviceAddress Address() const { return addr; }
size_t GetRingCount() { return size_t(ringCount); }
void *Map(VkDeviceSize &bindoffset, VkDeviceSize usedsize = 0);
void *Map(uint32_t *bindoffset = NULL, VkDeviceSize usedsize = 0);
@@ -233,6 +235,8 @@ private:
VkBuffer buf = VK_NULL_HANDLE;
VkDeviceMemory mem = VK_NULL_HANDLE;
VkDeviceAddress addr = 0;
// uniform buffer alignment requirement
VkDeviceSize align = 0;