1/* 2 * Copyright 2020 Valve Corporation 3 * SPDX-License-Identifier: MIT 4 * 5 * Authors: 6 * Jonathan Marek <jonathan@marek.ca> 7 */ 8 9#include <vulkan/vulkan.h> 10#include <vulkan/vk_android_native_buffer.h> /* android tu_entrypoints.h depends on this */ 11#include <assert.h> 12 13#include "tu_entrypoints.h" 14#include "vk_util.h" 15 16VKAPI_ATTR void VKAPI_CALL 17tu_GetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice pdev, 18 uint32_t *count, 19 VkQueueFamilyProperties *props) 20{ 21 if (!props) 22 return tu_GetPhysicalDeviceQueueFamilyProperties2(pdev, count, NULL); 23 24 VkQueueFamilyProperties2 props2[*count]; 25 for (uint32_t i = 0; i < *count; i++) { 26 props2[i].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2; 27 props2[i].pNext = NULL; 28 } 29 tu_GetPhysicalDeviceQueueFamilyProperties2(pdev, count, props2); 30 for (uint32_t i = 0; i < *count; i++) 31 props[i] = props2[i].queueFamilyProperties; 32} 33 34VKAPI_ATTR void VKAPI_CALL 35tu_GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice pdev, 36 VkFormat format, 37 VkImageType type, 38 VkSampleCountFlagBits samples, 39 VkImageUsageFlags usage, 40 VkImageTiling tiling, 41 uint32_t *count, 42 VkSparseImageFormatProperties *props) 43{ 44 const VkPhysicalDeviceSparseImageFormatInfo2 info = { 45 .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, 46 .format = format, 47 .type = type, 48 .samples = samples, 49 .usage = usage, 50 .tiling = tiling, 51 }; 52 53 if (!props) 54 return tu_GetPhysicalDeviceSparseImageFormatProperties2(pdev, &info, count, NULL); 55 56 VkSparseImageFormatProperties2 props2[*count]; 57 for (uint32_t i = 0; i < *count; i++) { 58 props2[i].sType = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2; 59 props2[i].pNext = NULL; 60 } 61 tu_GetPhysicalDeviceSparseImageFormatProperties2(pdev, &info, count, props2); 62 for (uint32_t i = 0; i < *count; i++) 63 props[i] = props2[i].properties; 64} 65 66VKAPI_ATTR void VKAPI_CALL 67tu_GetImageSparseMemoryRequirements(VkDevice device, 68 VkImage image, 69 uint32_t *count, 70 VkSparseImageMemoryRequirements *reqs) 71{ 72 const VkImageSparseMemoryRequirementsInfo2 info = { 73 .sType = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2, 74 .image = image 75 }; 76 77 if (!reqs) 78 return tu_GetImageSparseMemoryRequirements2(device, &info, count, NULL); 79 80 VkSparseImageMemoryRequirements2 reqs2[*count]; 81 for (uint32_t i = 0; i < *count; i++) { 82 reqs2[i].sType = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2; 83 reqs2[i].pNext = NULL; 84 } 85 tu_GetImageSparseMemoryRequirements2(device, &info, count, reqs2); 86 for (uint32_t i = 0; i < *count; i++) 87 reqs[i] = reqs2[i].memoryRequirements; 88} 89