vulkan: Use a static method to close semaphore handles
These functions don't need the device or external semaphore service at all. Make them free functions so that a future change can allow the handles to be closed after the device has destroyed its semaphore service. Bug: chromium:1359106 Change-Id: I246dd0a8f3f972c4547503d16bf8b00db14cdf58 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/104542 Reviewed-by: Loko Kung <lokokung@google.com> Commit-Queue: Austin Eng <enga@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Kokoro: Kokoro <noreply+kokoro@google.com>
This commit is contained in:
parent
70c3a4d605
commit
327cc706c2
|
@ -928,7 +928,12 @@ MaybeError Texture::ExportExternalTexture(VkImageLayout desiredLayout,
|
|||
return {};
|
||||
}
|
||||
|
||||
Texture::~Texture() {}
|
||||
Texture::~Texture() {
|
||||
if (mExternalSemaphoreHandle != kNullExternalSemaphoreHandle) {
|
||||
external_semaphore::Service::CloseHandle(mExternalSemaphoreHandle);
|
||||
}
|
||||
mExternalSemaphoreHandle = kNullExternalSemaphoreHandle;
|
||||
}
|
||||
|
||||
void Texture::SetLabelHelper(const char* prefix) {
|
||||
SetDebugName(ToBackend(GetDevice()), mHandle, prefix, GetLabel());
|
||||
|
@ -956,11 +961,6 @@ void Texture::DestroyImpl() {
|
|||
|
||||
mHandle = VK_NULL_HANDLE;
|
||||
mExternalAllocation = VK_NULL_HANDLE;
|
||||
|
||||
if (mExternalSemaphoreHandle != kNullExternalSemaphoreHandle) {
|
||||
device->GetExternalSemaphoreService()->CloseHandle(mExternalSemaphoreHandle);
|
||||
}
|
||||
mExternalSemaphoreHandle = kNullExternalSemaphoreHandle;
|
||||
}
|
||||
// For Vulkan, we currently run the base destruction code after the internal changes because
|
||||
// of the dependency on the texture state which the base code overwrites too early.
|
||||
|
@ -1345,8 +1345,7 @@ void Texture::EnsureSubresourceContentInitialized(CommandRecordingContext* recor
|
|||
|
||||
void Texture::UpdateExternalSemaphoreHandle(ExternalSemaphoreHandle handle) {
|
||||
if (mExternalSemaphoreHandle != kNullExternalSemaphoreHandle) {
|
||||
Device* device = ToBackend(GetDevice());
|
||||
device->GetExternalSemaphoreService()->CloseHandle(mExternalSemaphoreHandle);
|
||||
external_semaphore::Service::CloseHandle(mExternalSemaphoreHandle);
|
||||
}
|
||||
mExternalSemaphoreHandle = handle;
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@ class Service {
|
|||
ExternalSemaphoreHandle DuplicateHandle(ExternalSemaphoreHandle handle);
|
||||
|
||||
// Close an external handle.
|
||||
void CloseHandle(ExternalSemaphoreHandle handle);
|
||||
static void CloseHandle(ExternalSemaphoreHandle handle);
|
||||
|
||||
private:
|
||||
Device* mDevice = nullptr;
|
||||
|
|
|
@ -142,6 +142,7 @@ ExternalSemaphoreHandle Service::DuplicateHandle(ExternalSemaphoreHandle handle)
|
|||
return fd;
|
||||
}
|
||||
|
||||
// static
|
||||
void Service::CloseHandle(ExternalSemaphoreHandle handle) {
|
||||
int ret = close(handle);
|
||||
ASSERT(ret == 0);
|
||||
|
|
|
@ -51,6 +51,7 @@ ExternalSemaphoreHandle Service::DuplicateHandle(ExternalSemaphoreHandle handle)
|
|||
return kNullExternalSemaphoreHandle;
|
||||
}
|
||||
|
||||
// static
|
||||
void Service::CloseHandle(ExternalSemaphoreHandle handle) {}
|
||||
|
||||
} // namespace dawn::native::vulkan::external_semaphore
|
||||
|
|
|
@ -137,6 +137,7 @@ ExternalSemaphoreHandle Service::DuplicateHandle(ExternalSemaphoreHandle handle)
|
|||
return out_handle;
|
||||
}
|
||||
|
||||
// static
|
||||
void Service::CloseHandle(ExternalSemaphoreHandle handle) {
|
||||
zx_status_t status = zx_handle_close(handle);
|
||||
ASSERT(status == ZX_OK);
|
||||
|
|
Loading…
Reference in New Issue