From b490c8973dd5137257a5ec004a2d6dbb0b05020a Mon Sep 17 00:00:00 2001 From: Jordan Halase Date: Sun, 3 Nov 2019 19:53:24 -0600 Subject: Update pugl stub usage and verbose logging --- main.c | 55 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/main.c b/main.c index fc90146..eabe67f 100644 --- a/main.c +++ b/main.c @@ -334,7 +334,7 @@ VkResult createVulkanSurface(PuglView *view, VkXlibSurfaceCreateInfoKHR createInfo = { 0 }; createInfo.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR; //createInfo.dpy = ((struct PuglWorldImpl*)world)->impl->display; - createInfo.dpy = puglGetNativeWorld(view->world); + createInfo.dpy = puglGetNativeWorld(puglGetWorld(view)); createInfo.window = puglGetNativeWindow(view); PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR = @@ -726,7 +726,7 @@ static bool rvkIsDeviceSuitable(const struct RenderVulkan *const vk, VkQueueFamilyProperties *queueProperties = malloc(nQueueFamilies * sizeof(*queueProperties)); vk->api->vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &nQueueFamilies, queueProperties); for (uint32_t i = 0; i < nQueueFamilies; ++i) { - printf("Queue Family %d queueCount:\t%d\n", i, queueProperties[i].queueCount); + printf("Queue family %d queueCount:\t%d\n", i, queueProperties[i].queueCount); } for (uint32_t i = 0; i < nQueueFamilies; ++i) { printf("Queue family %d queueFlags:\t", i); @@ -766,6 +766,24 @@ static bool rvkIsDeviceSuitable(const struct RenderVulkan *const vk, return true; } +const char *strDeviceType(const VkPhysicalDeviceType deviceType) +{ + switch (deviceType) { + case VK_PHYSICAL_DEVICE_TYPE_OTHER: + return "Other"; + case VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU: + return "Integrated GPU"; + case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU: + return "Discrete GPU"; + case VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU: + return "Virtual GPU"; + case VK_PHYSICAL_DEVICE_TYPE_CPU: + return "CPU"; + default: + return "Unknown"; + } +} + /** Selects a physical device * * This application will not attempt to find the "most powerful" device on the @@ -806,23 +824,29 @@ int rvkSelectPhysicalDevice(struct RenderVulkan *vk) } } + const char *strType; uint32_t i; for (i = 0; i < nDevices; ++i) { vk->api->vkGetPhysicalDeviceProperties(devices[i], &deviceProperties[i]); - printf("Found physical device:\t\t`%s`\n", deviceProperties[i].deviceName); + strType = strDeviceType(deviceProperties[i].deviceType); + printf("Found physical device %d/%d:\t`%s`\t(%s)\n", + i+1, nDevices, deviceProperties[i].deviceName, strType); } for (i = 0; i < nDevices; ++i) { - printf("Checking suitability for\t`%s`...\n", deviceProperties[i].deviceName); + strType = strDeviceType(deviceProperties[i].deviceType); + printf("Checking suitability for\t`%s`...\t(%s)\n", deviceProperties[i].deviceName, strType); uint32_t graphicsIndex; if (rvkIsDeviceSuitable(vk, devices[i], &graphicsIndex)) { - printf("Using physical device:\t\t`%s`\n", deviceProperties[i].deviceName); + printf("Using physical device:\t\t`%s`\t(%s)\n", + deviceProperties[i].deviceName, + strDeviceType(deviceProperties[i].deviceType)); vk->deviceProperties = deviceProperties[i]; vk->physicalDevice = devices[i]; vk->graphicsIndex = graphicsIndex; - printf("Using GRAPHICS family index:\t%d\n", vk->graphicsIndex); + printf("Using queue family index:\t%d\tfor\tGRAPHICS\n", vk->graphicsIndex); goto done; } - printf("Device `%s` not suitable\n", deviceProperties[i].deviceName); + printf("Device `%s` (%s) not suitable\n", deviceProperties[i].deviceName, strType); } if (i >= nDevices) { rvkSetErrMsg(vk, "No suitable devices found"); @@ -1098,11 +1122,15 @@ static char *strPresentMode(const VkPresentModeKHR presentMode) static bool isPresentModeSupported(const VkPresentModeKHR *const presentModes, const uint32_t nPresentModes, const VkPresentModeKHR want) { + const char *const strWant = strPresentMode(want); + printf("Checking for present mode:\t`%s`...\n", strWant); for (uint32_t i = 0; i < nPresentModes; ++i) { if (presentModes[i] == want) { return true; } } + /* The same device on different platforms may not have the same present modes */ + printf("Present mode `%s` not available for this device or platform\n", strWant); return false; } @@ -1170,7 +1198,7 @@ static int rvkCreateRawSwapchain(struct RenderVulkan *vk, int width, int height) VkPresentModeKHR presentMode; for (i = 0; i < nPresentModes; ++i) { presentMode = presentModes[i]; - printf("Found present mode:\t\t%s\t(%d)\n", strPresentMode(presentMode), presentMode); + printf("Found present mode:\t\t`%s`\t(%d)\n", strPresentMode(presentMode), presentMode); } if (isPresentModeSupported(presentModes, nPresentModes, VK_PRESENT_MODE_MAILBOX_KHR)) { @@ -1181,7 +1209,7 @@ static int rvkCreateRawSwapchain(struct RenderVulkan *vk, int width, int height) presentMode = VK_PRESENT_MODE_FIFO_KHR; } free(presentModes); - printf("Using present mode:\t\t%s\t(%d)\n", strPresentMode(presentMode), presentMode); + printf("Using present mode:\t\t`%s`\t(%d)\n", strPresentMode(presentMode), presentMode); // TODO: Clamp vk->swapchain.extent.width = width; @@ -1556,11 +1584,10 @@ PuglStatus onDisplay(PuglView *view) } /* If running continuously, Vulkan can blast the queue with rendering - * work faster than the GPU can get around to doing it, causing RAM - * usage to grow indefinitely. We use fences to limit the number of - * submitted frames to the number of swapchain images. These fences will - * be required later anyway when flushing persistently mapped uniform - * buffer ranges. + * work faster than the GPU can execute it, causing RAM usage to grow + * indefinitely. We use fences to limit the number of submitted frames + * to the number of swapchain images. These fences will be required + * later anyway when flushing persistently mapped uniform buffer ranges. */ vk->dev->vkWaitForFences(vk->device, 1, &vk->sync.fence.swapchain[imageIndex], -- cgit v1.2.1