vulkan-wsi-layer/util/custom_mutex.cpp
Alex Bates ace729f7f8 Support nonzero present timing queue family
Adds a per-device check for a 'best' queue family to
use for present timing, rather than always using index 0.

wsi_ext_present_timing holds resources (such as the command
buffer) per queue family, rather than supporting only one. However,
currently, only one queue family is supported at a time.
In future, we can hook vkGetDeviceQueue calls to map
VkQueues to their family index. Doing this will transparently
give present timing support for multiple queue families.

Signed-off-by: Alex Bates <alex.bates@arm.com>
Change-Id: I5becb29dfc4a082e301031e0c693acd23eb95a51
2025-10-06 11:27:34 +01:00

109 lines
2.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (c) 2025 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/**
* @file custom_mutex.cpp
* @brief Implementation of the exceptionneutral mutex helpers declared in
* @ref custom_mutex.hpp.
*/
#include "custom_mutex.hpp"
#include <cstring>
namespace util
{
bool mutex::lock() noexcept
{
try
{
m_mtx.lock();
return true;
}
catch (const std::system_error &)
{
WSI_LOG_WARNING("Failed to lock mutex: error %d (%s)", errno, std::strerror(errno));
return false;
}
}
bool mutex::try_lock() noexcept
{
try
{
return m_mtx.try_lock();
}
catch (const std::system_error &)
{
return false;
}
}
void mutex::unlock() noexcept
{
m_mtx.unlock();
}
std::mutex &mutex::native() noexcept
{
return m_mtx;
}
bool recursive_mutex::lock() noexcept
{
try
{
m_mtx.lock();
return true;
}
catch (const std::system_error &)
{
WSI_LOG_WARNING("Failed to lock recursive_mutex: error %d (%s)", errno, std::strerror(errno));
return false;
}
}
bool recursive_mutex::try_lock() noexcept
{
try
{
return m_mtx.try_lock();
}
catch (const std::system_error &)
{
return false;
}
}
void recursive_mutex::unlock() noexcept
{
m_mtx.unlock();
}
std::recursive_mutex &recursive_mutex::native() noexcept
{
return m_mtx;
}
} /* namespace util */