Skip to content

Commit 4608f6a

Browse files
committed
layers: Fix AS addr state tracking
1 parent 9374fbf commit 4608f6a

2 files changed

Lines changed: 5 additions & 2 deletions

File tree

layers/state_tracker/ray_tracing_state.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ class AccelerationStructureKHR : public StateObject, public SubStateManager<Acce
157157
VkDeviceAddressRangeKHR GetEffectiveDeviceAddressRange() const;
158158
vvl::range<VkDeviceAddress> GetVvlEffectiveDeviceAddressRange() const;
159159
uint64_t GetOpaqueHandle() const { return opaque_handle; }
160-
VkDeviceAddress GetAccelerationStructureAddress() const { return acceleration_structure_address; }
160+
VkDeviceAddress GetAccelerationStructureAddress() const { return acceleration_structure_address.load(); }
161161
void SetAccelerationStructureAddress(VkDeviceAddress addr) { acceleration_structure_address = addr; }
162162
const std::optional<vku::safe_VkAccelerationStructureBuildGeometryInfoKHR> &GetBuildInfo() const { return build_geometry_info; }
163163
void SetBuildInfo(const std::optional<vku::safe_VkAccelerationStructureBuildGeometryInfoKHR> &info) {
@@ -176,7 +176,7 @@ class AccelerationStructureKHR : public StateObject, public SubStateManager<Acce
176176
std::variant<CreateInfo1, vku::safe_VkAccelerationStructureCreateInfo2KHR> create_info;
177177
VkDeviceAddressRangeKHR device_address_range{};
178178
uint64_t opaque_handle = 0;
179-
VkDeviceAddress acceleration_structure_address = 0;
179+
std::atomic<VkDeviceAddress> acceleration_structure_address = 0;
180180
std::optional<vku::safe_VkAccelerationStructureBuildGeometryInfoKHR> build_geometry_info;
181181
std::vector<VkAccelerationStructureBuildRangeInfoKHR> build_range_infos{};
182182
};

layers/state_tracker/state_tracker.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6606,6 +6606,9 @@ void DeviceState::PostCallRecordGetAccelerationStructureDeviceAddressKHR(VkDevic
66066606
return;
66076607
}
66086608
if (auto as_state = Get<vvl::AccelerationStructureKHR>(pInfo->accelerationStructure)) {
6609+
if (as_state->GetAccelerationStructureAddress() != 0) {
6610+
return;
6611+
}
66096612
as_state->SetAccelerationStructureAddress(record_obj.device_address);
66106613
WriteLockGuard lock(as_with_addresses.array_mutex);
66116614
if (as_with_addresses.array.capacity() <= (as_with_addresses.array.size() + 1)) {

0 commit comments

Comments
 (0)