mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-22 12:50:35 +01:00
nvk: Disallow GetMemoryFdProperties with OPAQUE_FD_BIT
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35213>
This commit is contained in:
parent
601cf33c44
commit
cfeda2d8ae
1 changed files with 22 additions and 23 deletions
|
|
@ -70,41 +70,40 @@ nvk_GetMemoryFdPropertiesKHR(VkDevice device,
|
|||
VkResult result;
|
||||
|
||||
switch (handleType) {
|
||||
case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT:
|
||||
case VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT:
|
||||
result = nvkmd_dev_import_dma_buf(dev->nvkmd, &dev->vk.base, fd, &mem);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
break;
|
||||
case VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT:
|
||||
/* From the Vulkan 1.4.315 spec:
|
||||
*
|
||||
* VUID-vkGetMemoryFdPropertiesKHR-handleType-00674
|
||||
*
|
||||
* "handleType must not be
|
||||
* VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT"
|
||||
*/
|
||||
return vk_error(dev, VK_ERROR_INVALID_EXTERNAL_HANDLE);
|
||||
default:
|
||||
return vk_error(dev, VK_ERROR_INVALID_EXTERNAL_HANDLE);
|
||||
}
|
||||
|
||||
uint32_t type_bits = 0;
|
||||
if (handleType == VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT) {
|
||||
for (unsigned t = 0; t < ARRAY_SIZE(pdev->mem_types); t++) {
|
||||
const VkMemoryType *type = &pdev->mem_types[t];
|
||||
const enum nvkmd_mem_flags type_flags =
|
||||
nvk_memory_type_flags(type, handleType);
|
||||
for (unsigned t = 0; t < ARRAY_SIZE(pdev->mem_types); t++) {
|
||||
const VkMemoryType *type = &pdev->mem_types[t];
|
||||
const enum nvkmd_mem_flags type_flags =
|
||||
nvk_memory_type_flags(type, handleType);
|
||||
|
||||
/* Flags required to be set on mem to be imported as type
|
||||
*
|
||||
* If we're importing into a host-visible heap, we have to be able to
|
||||
* map the memory.
|
||||
*/
|
||||
const enum nvkmd_mem_flags req_flags = type_flags & NVKMD_MEM_CAN_MAP;
|
||||
if (req_flags & ~mem->flags)
|
||||
continue;
|
||||
/* Flags required to be set on mem to be imported as type
|
||||
*
|
||||
* If we're importing into a host-visible heap, we have to be able to
|
||||
* map the memory.
|
||||
*/
|
||||
const enum nvkmd_mem_flags req_flags = type_flags & NVKMD_MEM_CAN_MAP;
|
||||
if (req_flags & ~mem->flags)
|
||||
continue;
|
||||
|
||||
type_bits |= (1 << t);
|
||||
}
|
||||
} else {
|
||||
for (unsigned t = 0; t < ARRAY_SIZE(pdev->mem_types); t++) {
|
||||
const enum nvkmd_mem_flags flags =
|
||||
nvk_memory_type_flags(&pdev->mem_types[t], handleType);
|
||||
if (!(flags & ~mem->flags))
|
||||
type_bits |= (1 << t);
|
||||
}
|
||||
type_bits |= (1 << t);
|
||||
}
|
||||
|
||||
pMemoryFdProperties->memoryTypeBits = type_bits;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue