hwcontext_vulkan: check for memory size before choosing type

It makes allocation a bit more robust in case some weird device with
weird drivers which segments memory in weird ways appears.
This commit is contained in:
Lynne 2020-11-24 23:36:08 +01:00
parent ff29ca2f1f
commit 9cf1811d3d
No known key found for this signature in database
GPG Key ID: A2FEA5F03F034464
1 changed files with 7 additions and 1 deletions

View File

@ -1270,12 +1270,18 @@ static int alloc_mem(AVHWDeviceContext *ctx, VkMemoryRequirements *req,
/* The vulkan spec requires memory types to be sorted in the "optimal"
* order, so the first matching type we find will be the best/fastest one */
for (int i = 0; i < p->mprops.memoryTypeCount; i++) {
const VkMemoryType *type = &p->mprops.memoryTypes[i];
/* The memory type must be supported by the requirements (bitfield) */
if (!(req->memoryTypeBits & (1 << i)))
continue;
/* The memory type flags must include our properties */
if ((p->mprops.memoryTypes[i].propertyFlags & req_flags) != req_flags)
if ((type->propertyFlags & req_flags) != req_flags)
continue;
/* The memory type must be large enough */
if (req->size > p->mprops.memoryHeaps[type->heapIndex].size)
continue;
/* Found a suitable memory type */