diff --git a/src/vsg/raytracing/AccelerationGeometry.cpp b/src/vsg/raytracing/AccelerationGeometry.cpp index 655cfe127..8be420d54 100644 --- a/src/vsg/raytracing/AccelerationGeometry.cpp +++ b/src/vsg/raytracing/AccelerationGeometry.cpp @@ -55,9 +55,17 @@ void AccelerationGeometry::compile(Context& context) auto vertexBufferInfo = vsg::createBufferAndTransferData(context, vertexDataList, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, VK_SHARING_MODE_EXCLUSIVE); auto indexBufferInfo = vsg::createBufferAndTransferData(context, indexDataList, VK_BUFFER_USAGE_INDEX_BUFFER_BIT, VK_SHARING_MODE_EXCLUSIVE); #else - auto vertexBufferInfo = vsg::createHostVisibleBuffer(context.device, vertexDataList, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, VK_SHARING_MODE_EXCLUSIVE); + auto vertexBufferInfo = vsg::createHostVisibleBuffer(context.device, vertexDataList, + VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | + VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR, + VK_SHARING_MODE_EXCLUSIVE); vsg::copyDataListToBuffers(context.device, vertexBufferInfo); - auto indexBufferInfo = vsg::createHostVisibleBuffer(context.device, indexDataList, VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, VK_SHARING_MODE_EXCLUSIVE); + auto indexBufferInfo = vsg::createHostVisibleBuffer(context.device, indexDataList, + VK_BUFFER_USAGE_INDEX_BUFFER_BIT | + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | + VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR, + VK_SHARING_MODE_EXCLUSIVE); vsg::copyDataListToBuffers(context.device, indexBufferInfo); #endif diff --git a/src/vsg/state/Buffer.cpp b/src/vsg/state/Buffer.cpp index a4e22c8e7..a38185523 100644 --- a/src/vsg/state/Buffer.cpp +++ b/src/vsg/state/Buffer.cpp @@ -158,8 +158,11 @@ ref_ptr vsg::createBufferAndMemory(Device* device, VkDeviceSize size, Vk auto buffer = vsg::Buffer::create(size, usage, sharingMode); buffer->compile(device); + VkMemoryAllocateFlagsInfo memFlags = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO }; + memFlags.flags = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT; + auto memRequirements = buffer->getMemoryRequirements(device->deviceID); - auto memory = vsg::DeviceMemory::create(device, memRequirements, memoryProperties); + auto memory = vsg::DeviceMemory::create(device, memRequirements, memoryProperties, &memFlags); buffer->bind(memory, 0); return buffer;