Search code examples
vulkan

How to deal with devices with no transfer queues?


I have found an Android device in GPUInfo that has only one queue family, and that family doesn't support TRANSFER_BIT.

I was wondering how would you initialize an image without transfer operations. Usually, one would use a staging buffer and use vkCmdCopyBufferToImage to initialize it.

An alternative way I'm ware of (but never used so far) is using the VK_EXT_external_memory_host extension. As mentioned in this answer. However, this extension is not supported in this device.

So how would you initialize images with such a device? Any other hints for supporting devices lacking transfer queues?


Solution

  • All graphics and compute queue families implicitly support transfer operations. The bit can be present on those queue families, but it doesn't mean much for it to be absent. It's mostly there for transfer-only queues (or for extended queue types that don't have to support transfers).