|
|
@@ -125,11 +125,12 @@ void VKFence::Protect(VKResource* resource) {
|
|
|
protected_resources.push_back(resource);
|
|
|
}
|
|
|
|
|
|
-void VKFence::Unprotect(const VKResource* resource) {
|
|
|
+void VKFence::Unprotect(VKResource* resource) {
|
|
|
const auto it = std::find(protected_resources.begin(), protected_resources.end(), resource);
|
|
|
- if (it != protected_resources.end()) {
|
|
|
- protected_resources.erase(it);
|
|
|
- }
|
|
|
+ ASSERT(it != protected_resources.end());
|
|
|
+
|
|
|
+ resource->OnFenceRemoval(this);
|
|
|
+ protected_resources.erase(it);
|
|
|
}
|
|
|
|
|
|
VKFenceWatch::VKFenceWatch() = default;
|
|
|
@@ -141,12 +142,11 @@ VKFenceWatch::~VKFenceWatch() {
|
|
|
}
|
|
|
|
|
|
void VKFenceWatch::Wait() {
|
|
|
- if (!fence) {
|
|
|
+ if (fence == nullptr) {
|
|
|
return;
|
|
|
}
|
|
|
fence->Wait();
|
|
|
fence->Unprotect(this);
|
|
|
- fence = nullptr;
|
|
|
}
|
|
|
|
|
|
void VKFenceWatch::Watch(VKFence& new_fence) {
|