From 111c37832aa812e3a7d809f52730142e2654c1f9 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Sat, 20 Feb 2016 14:20:17 +0100 Subject: [PATCH 1/3] Make sure we get a queue which also supports compute. Graphics + Compute queue must be supported. --- gfx/common/vulkan_common.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gfx/common/vulkan_common.c b/gfx/common/vulkan_common.c index e4bcef072f..527b504bf3 100644 --- a/gfx/common/vulkan_common.c +++ b/gfx/common/vulkan_common.c @@ -915,7 +915,8 @@ bool vulkan_context_init(gfx_ctx_vulkan_data_t *vk, for (i = 0; i < queue_count; i++) { - if (queue_properties[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) + VkQueueFlags required = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT; + if ((queue_properties[i].queueFlags & required) == required) { vk->context.graphics_queue_index = i; RARCH_LOG("[Vulkan]: Device supports %u sub-queues.\n", From b61c05e10f29be3b5f70498f397cbcb87e066c54 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Sat, 20 Feb 2016 14:24:36 +0100 Subject: [PATCH 2/3] Log the number of swapchain images we get. --- gfx/common/vulkan_common.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gfx/common/vulkan_common.c b/gfx/common/vulkan_common.c index 527b504bf3..9b6cd39a7d 100644 --- a/gfx/common/vulkan_common.c +++ b/gfx/common/vulkan_common.c @@ -1313,6 +1313,11 @@ bool vulkan_create_swapchain(gfx_ctx_vulkan_data_t *vk, swapchain_size = surface_properties.currentExtent; desired_swapchain_images = surface_properties.minImageCount + 1; + + /* Limit latency. */ + if (desired_swapchain_images > 3) + desired_swapchain_images = 3; + if ((surface_properties.maxImageCount > 0) && (desired_swapchain_images > surface_properties.maxImageCount)) desired_swapchain_images = surface_properties.maxImageCount; @@ -1381,6 +1386,8 @@ bool vulkan_create_swapchain(gfx_ctx_vulkan_data_t *vk, vk->fpGetSwapchainImagesKHR(vk->context.device, vk->swapchain, &vk->context.num_swapchain_images, vk->context.swapchain_images); + RARCH_LOG("[Vulkan]: Got %u swapchain images.\n", vk->context.num_swapchain_images); + for (i = 0; i < vk->context.num_swapchain_images; i++) { if (vk->context.swapchain_fences[i]) From 8550c16f86ea6f61e8eb84ee1416154dd8e844e4 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Sat, 20 Feb 2016 15:17:25 +0100 Subject: [PATCH 3/3] Always try to use cached memory if we can for linear textures. Should improve cores which use SOFTWARE_FRAMEBUFFER. --- gfx/common/vulkan_common.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/gfx/common/vulkan_common.c b/gfx/common/vulkan_common.c index 9b6cd39a7d..dad24c7442 100644 --- a/gfx/common/vulkan_common.c +++ b/gfx/common/vulkan_common.c @@ -191,12 +191,9 @@ struct vk_texture vulkan_create_texture(vk_t *vk, } else { - VkMemoryPropertyFlags cached = type == VULKAN_TEXTURE_READBACK ? - VK_MEMORY_PROPERTY_HOST_CACHED_BIT : 0; - alloc.memoryTypeIndex = vulkan_find_memory_type_fallback(&vk->context->memory_properties, mem_reqs.memoryTypeBits, - VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | cached, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); }