venus: implement vkGet[Device]ImageSparseMemoryRequirements

These were left unimplemented despite sparse support being added back to
venus in a55d26b5 ("venus: add back sparse binding support")

Same as vn_GetPhysicalDeviceSparseImageFormatProperties2, venus sparse
support requires queues that also support transfer so any sparse-only
queues are filtered out. If a device only supports sparse with
sparse-only queues, sparse features are disabled and these functions
return count of 0.

Fixes: a55d26b566 ("venus: add back sparse binding support")

Signed-off-by: Juston Li <justonli@google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26297>
This commit is contained in:
Juston Li 2023-11-17 12:59:43 -08:00 committed by Marge Bot
parent a0355dfcfb
commit 746da376e4

View file

@ -505,13 +505,23 @@ vn_GetImageMemoryRequirements2(VkDevice device,
void
vn_GetImageSparseMemoryRequirements2(
UNUSED VkDevice device,
UNUSED const VkImageSparseMemoryRequirementsInfo2 *pInfo,
VkDevice device,
const VkImageSparseMemoryRequirementsInfo2 *pInfo,
uint32_t *pSparseMemoryRequirementCount,
UNUSED VkSparseImageMemoryRequirements2 *pSparseMemoryRequirements)
VkSparseImageMemoryRequirements2 *pSparseMemoryRequirements)
{
struct vn_device *dev = vn_device_from_handle(device);
/* see vn_GetPhysicalDeviceSparseImageFormatProperties2 */
*pSparseMemoryRequirementCount = 0;
if (dev->physical_device->sparse_binding_disabled) {
*pSparseMemoryRequirementCount = 0;
return;
}
/* TODO local or per-device cache */
vn_call_vkGetImageSparseMemoryRequirements2(dev->instance, device, pInfo,
pSparseMemoryRequirementCount,
pSparseMemoryRequirements);
}
static void
@ -847,11 +857,21 @@ vn_GetDeviceImageMemoryRequirements(
void
vn_GetDeviceImageSparseMemoryRequirements(
UNUSED VkDevice device,
UNUSED const VkDeviceImageMemoryRequirements *pInfo,
VkDevice device,
const VkDeviceImageMemoryRequirements *pInfo,
uint32_t *pSparseMemoryRequirementCount,
UNUSED VkSparseImageMemoryRequirements2 *pSparseMemoryRequirements)
VkSparseImageMemoryRequirements2 *pSparseMemoryRequirements)
{
struct vn_device *dev = vn_device_from_handle(device);
/* see vn_GetPhysicalDeviceSparseImageFormatProperties2 */
*pSparseMemoryRequirementCount = 0;
if (dev->physical_device->sparse_binding_disabled) {
*pSparseMemoryRequirementCount = 0;
return;
}
/* TODO per-device cache */
vn_call_vkGetDeviceImageSparseMemoryRequirements(
dev->instance, device, pInfo, pSparseMemoryRequirementCount,
pSparseMemoryRequirements);
}