The future is here. Some graphics cards are now only setting the transfer bit on queues with some special DMA controller relationship that can perform higher speed transfers. Let's tell the truth. (#1187)

This commit is contained in:
2019-04-15 19:09:45 +09:00 committed by Lucas Kent
parent 3518268b7f
commit c71270a0e7
2 changed files with 7 additions and 8 deletions

View File

@ -1,5 +1,6 @@
# Unreleased (breaking) # Unreleased (breaking)
- `QueueFamily::explicitly_supports_tranfers` only returns true if `vk::QUEUE_TRANSFER_BIT` is set instead of also always returning true. Removed `supports_transfers`.
- Update to winit 0.19 - Update to winit 0.19
- Add support for `#include "..."` and `#include <...>` directives within source - Add support for `#include "..."` and `#include <...>` directives within source
files. files.

View File

@ -1073,15 +1073,13 @@ impl<'a> QueueFamily<'a> {
} }
/// Returns true if queues of this family can execute transfer operations. /// Returns true if queues of this family can execute transfer operations.
/// /// > **Note**: While all queues that can perform graphics or compute operations can implicitly perform
/// > **Note**: Queues that support graphics or compute operations also always support transfer /// > transfer operations, graphics & compute queues only optionally indicate support for tranfers.
/// > operations. As of writing this, this function will always return true. The purpose of /// > Many discrete cards will have one queue family that exclusively sets the VK_QUEUE_TRANSFER_BIT
/// > this function is to be future-proofed in case queues that don't support transfer /// > to indicate a special relationship with the DMA module and more efficient transfers.
/// > operations are ever added to Vulkan.
#[inline] #[inline]
pub fn supports_transfers(&self) -> bool { pub fn explicitly_supports_transfers(&self) -> bool {
(self.flags() & vk::QUEUE_TRANSFER_BIT) != 0 || self.supports_graphics() || (self.flags() & vk::QUEUE_TRANSFER_BIT) != 0
self.supports_compute()
} }
/// Returns true if queues of this family can execute sparse resources binding operations. /// Returns true if queues of this family can execute sparse resources binding operations.