vulkan_test2

diff main.c @ 2:5b2ae06283aa

more queries
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 18 Dec 2016 09:15:16 +0200
parents 8cb584143df3
children
line diff
     1.1 --- a/main.c	Fri Apr 01 07:14:47 2016 +0300
     1.2 +++ b/main.c	Sun Dec 18 09:15:16 2016 +0200
     1.3 @@ -5,10 +5,12 @@
     1.4  #include <vulkan/vulkan.h>
     1.5  
     1.6  const char *get_device_name(VkPhysicalDeviceType type);
     1.7 +const char *get_mem_prop_flag_string(VkMemoryPropertyFlags flags);
     1.8  const char *get_queue_flag_string(VkQueueFlagBits flags);
     1.9  int ver_major(uint32_t ver);
    1.10  int ver_minor(uint32_t ver);
    1.11  int ver_patch(uint32_t ver);
    1.12 +const char *mem_size_str(long sz);
    1.13  
    1.14  int main(void)
    1.15  {
    1.16 @@ -46,6 +48,7 @@
    1.17  
    1.18  	for(i=0; i<(int)num_devices; i++) {
    1.19  		VkPhysicalDeviceProperties dev_prop;
    1.20 +		VkPhysicalDeviceMemoryProperties mem_prop;
    1.21  		VkQueueFamilyProperties *qprop;
    1.22  		uint32_t qprop_count;
    1.23  
    1.24 @@ -59,6 +62,21 @@
    1.25  				ver_patch(dev_prop.driverVersion));
    1.26  		printf("  vendor id: %x  device id: %x\n", dev_prop.vendorID, dev_prop.deviceID);
    1.27  
    1.28 +
    1.29 +		vkGetPhysicalDeviceMemoryProperties(devices[i], &mem_prop);
    1.30 +		printf("  %d memory heaps:\n", mem_prop.memoryHeapCount);
    1.31 +		for(j=0; j<mem_prop.memoryHeapCount; j++) {
    1.32 +			VkMemoryHeap heap = mem_prop.memoryHeaps[j];
    1.33 +			printf("    Heap %d - size: %s, flags: %s\n", j, mem_size_str(heap.size),
    1.34 +					heap.flags & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT ? "device-local" : "-");
    1.35 +		}
    1.36 +		printf("  %d memory types:\n", mem_prop.memoryTypeCount);
    1.37 +		for(j=0; j<mem_prop.memoryTypeCount; j++) {
    1.38 +			VkMemoryType type = mem_prop.memoryTypes[j];
    1.39 +			printf("    Type %d - heap: %d, flags: %s\n", j, type.heapIndex,
    1.40 +					get_mem_prop_flag_string(type.propertyFlags));
    1.41 +		}
    1.42 +
    1.43  		vkGetPhysicalDeviceQueueFamilyProperties(devices[i], &qprop_count, 0);
    1.44  		if(qprop_count <= 0) {
    1.45  			continue;
    1.46 @@ -126,6 +144,33 @@
    1.47  	return "unknown";
    1.48  }
    1.49  
    1.50 +const char *get_mem_prop_flag_string(VkMemoryPropertyFlags flags)
    1.51 +{
    1.52 +	static char str[128];
    1.53 +
    1.54 +	str[0] = 0;
    1.55 +	if(flags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) {
    1.56 +		strcat(str, "device-local ");
    1.57 +	}
    1.58 +	if(flags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) {
    1.59 +		strcat(str, "host-visible ");
    1.60 +	}
    1.61 +	if(flags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) {
    1.62 +		strcat(str, "host-coherent ");
    1.63 +	}
    1.64 +	if(flags & VK_MEMORY_PROPERTY_HOST_CACHED_BIT) {
    1.65 +		strcat(str, "host-cached ");
    1.66 +	}
    1.67 +	if(flags & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT) {
    1.68 +		strcat(str, "lazily-allocated ");
    1.69 +	}
    1.70 +
    1.71 +	if(!*str) {
    1.72 +		strcat(str, "-");
    1.73 +	}
    1.74 +	return str;
    1.75 +}
    1.76 +
    1.77  const char *get_queue_flag_string(VkQueueFlagBits flags)
    1.78  {
    1.79  	static char str[128];
    1.80 @@ -143,6 +188,9 @@
    1.81  	if(flags & VK_QUEUE_SPARSE_BINDING_BIT) {
    1.82  		strcat(str, "sparse-binding ");
    1.83  	}
    1.84 +	if(!*str) {
    1.85 +		strcat(str, "-");
    1.86 +	}
    1.87  	return str;
    1.88  }
    1.89  
    1.90 @@ -160,3 +208,18 @@
    1.91  {
    1.92  	return ver & 0xfff;
    1.93  }
    1.94 +
    1.95 +const char *mem_size_str(long sz)
    1.96 +{
    1.97 +	static char str[64];
    1.98 +	static const char *unitstr[] = { "bytes", "KB", "MB", "GB", "TB", "PB", 0 };
    1.99 +	int uidx = 0;
   1.100 +	sz *= 10;
   1.101 +
   1.102 +	while(sz >= 10240 && unitstr[uidx + 1]) {
   1.103 +		sz /= 1024;
   1.104 +		++uidx;
   1.105 +	}
   1.106 +	sprintf(str, "%ld.%ld %s", sz / 10, sz % 10, unitstr[uidx]);
   1.107 +	return str;
   1.108 +}