From fe685a377f95c23b4c9e0bb6d8c9a44eb76c5680 Mon Sep 17 00:00:00 2001 From: Florian RICHER Date: Sat, 24 May 2025 16:55:03 +0200 Subject: [PATCH] Queue: Don't allocate dedicate presentation queue (use graphics queue for it) --- .../fr/mrdev023/vulkan_java/vk/Device.java | 7 ------- .../vulkan_java/vk/QueueFamilyIndices.java | 18 ++-------------- .../vulkan_java/vk/QueuesCreator.java | 4 ---- .../QueueFamilyRequirementResultLogger.java | 2 -- .../QueueFamilyRequirementsValidator.java | 21 +++++++------------ 5 files changed, 9 insertions(+), 43 deletions(-) diff --git a/src/main/java/fr/mrdev023/vulkan_java/vk/Device.java b/src/main/java/fr/mrdev023/vulkan_java/vk/Device.java index afe6e29..30acc49 100644 --- a/src/main/java/fr/mrdev023/vulkan_java/vk/Device.java +++ b/src/main/java/fr/mrdev023/vulkan_java/vk/Device.java @@ -21,7 +21,6 @@ public class Device { private final PhysicalDevice physicalDevice; private final VkDevice vkDevice; - private final Optional presentQueue; private final Optional graphicsQueue; private final Optional computeQueue; private final Optional transferQueue; @@ -58,8 +57,6 @@ public class Device { graphicsQueue = queueFamilyIndices.getGraphicsQueueFamilyIndex() .flatMap(queueFamilyIndex -> Optional.of(queuesCreator.createQueue(this, queueFamilyIndex))); - presentQueue = queueFamilyIndices.getPresentQueueFamilyIndex() - .flatMap(queueFamilyIndex -> Optional.of(queuesCreator.createQueue(this, queueFamilyIndex))); computeQueue = queueFamilyIndices.getComputeQueueFamilyIndex() .flatMap(queueFamilyIndex -> Optional.of(queuesCreator.createQueue(this, queueFamilyIndex))); transferQueue = queueFamilyIndices.getTransferQueueFamilyIndex() @@ -86,10 +83,6 @@ public class Device { vkDeviceWaitIdle(vkDevice); } - public Optional getPresentQueue() { - return presentQueue; - } - public Optional getGraphicsQueue() { return graphicsQueue; } diff --git a/src/main/java/fr/mrdev023/vulkan_java/vk/QueueFamilyIndices.java b/src/main/java/fr/mrdev023/vulkan_java/vk/QueueFamilyIndices.java index 64bb61f..f8c36cd 100644 --- a/src/main/java/fr/mrdev023/vulkan_java/vk/QueueFamilyIndices.java +++ b/src/main/java/fr/mrdev023/vulkan_java/vk/QueueFamilyIndices.java @@ -1,20 +1,17 @@ package fr.mrdev023.vulkan_java.vk; -import java.util.HashMap; import java.util.Optional; public class QueueFamilyIndices { private final Optional graphicsQueueFamilyIndex; private final Optional computeQueueFamilyIndex; private final Optional transferQueueFamilyIndex; - private final Optional presentQueueFamilyIndex; public QueueFamilyIndices(Optional graphicsQueueFamilyIndex, Optional computeQueueFamilyIndex, - Optional transferQueueFamilyIndex, Optional presentQueueFamilyIndex) { + Optional transferQueueFamilyIndex) { this.graphicsQueueFamilyIndex = graphicsQueueFamilyIndex; this.computeQueueFamilyIndex = computeQueueFamilyIndex; this.transferQueueFamilyIndex = transferQueueFamilyIndex; - this.presentQueueFamilyIndex = presentQueueFamilyIndex; } public Optional getGraphicsQueueFamilyIndex() { @@ -29,15 +26,10 @@ public class QueueFamilyIndices { return transferQueueFamilyIndex; } - public Optional getPresentQueueFamilyIndex() { - return presentQueueFamilyIndex; - } - public static class Builder { private Optional graphicsQueueFamilyIndex; private Optional computeQueueFamilyIndex; private Optional transferQueueFamilyIndex; - private Optional presentQueueFamilyIndex; public Builder withGraphicsQueueFamilyIndex(int graphicsQueueFamilyIndex) { this.graphicsQueueFamilyIndex = Optional.of(graphicsQueueFamilyIndex); @@ -54,14 +46,8 @@ public class QueueFamilyIndices { return this; } - public Builder withPresentQueueFamilyIndex(int presentQueueFamilyIndex) { - this.presentQueueFamilyIndex = Optional.of(presentQueueFamilyIndex); - return this; - } - public QueueFamilyIndices build() { - return new QueueFamilyIndices(graphicsQueueFamilyIndex, computeQueueFamilyIndex, transferQueueFamilyIndex, - presentQueueFamilyIndex); + return new QueueFamilyIndices(graphicsQueueFamilyIndex, computeQueueFamilyIndex, transferQueueFamilyIndex); } } } diff --git a/src/main/java/fr/mrdev023/vulkan_java/vk/QueuesCreator.java b/src/main/java/fr/mrdev023/vulkan_java/vk/QueuesCreator.java index 8505175..db0c087 100644 --- a/src/main/java/fr/mrdev023/vulkan_java/vk/QueuesCreator.java +++ b/src/main/java/fr/mrdev023/vulkan_java/vk/QueuesCreator.java @@ -67,10 +67,6 @@ public class QueuesCreator { var familyIndex = queueFamilyIndices.getTransferQueueFamilyIndex().get(); families.put(familyIndex, families.getOrDefault(familyIndex, 0) + 1); } - if (queueFamilyIndices.getPresentQueueFamilyIndex().isPresent()) { - var familyIndex = queueFamilyIndices.getPresentQueueFamilyIndex().get(); - families.put(familyIndex, families.getOrDefault(familyIndex, 0) + 1); - } return families; } } \ No newline at end of file diff --git a/src/main/java/fr/mrdev023/vulkan_java/vk/loggers/QueueFamilyRequirementResultLogger.java b/src/main/java/fr/mrdev023/vulkan_java/vk/loggers/QueueFamilyRequirementResultLogger.java index af8bff8..4076837 100644 --- a/src/main/java/fr/mrdev023/vulkan_java/vk/loggers/QueueFamilyRequirementResultLogger.java +++ b/src/main/java/fr/mrdev023/vulkan_java/vk/loggers/QueueFamilyRequirementResultLogger.java @@ -13,8 +13,6 @@ public class QueueFamilyRequirementResultLogger { queueFamilyIndices.flatMap(QueueFamilyIndices::getComputeQueueFamilyIndex)); logQueueFamilyResult("Transfer Queue", queueFamilyIndices.flatMap(QueueFamilyIndices::getTransferQueueFamilyIndex)); - logQueueFamilyResult("Present Queue", - queueFamilyIndices.flatMap(QueueFamilyIndices::getPresentQueueFamilyIndex)); ScopedLogger.popScope(); } diff --git a/src/main/java/fr/mrdev023/vulkan_java/vk/validators/QueueFamilyRequirementsValidator.java b/src/main/java/fr/mrdev023/vulkan_java/vk/validators/QueueFamilyRequirementsValidator.java index 20df616..07ed535 100644 --- a/src/main/java/fr/mrdev023/vulkan_java/vk/validators/QueueFamilyRequirementsValidator.java +++ b/src/main/java/fr/mrdev023/vulkan_java/vk/validators/QueueFamilyRequirementsValidator.java @@ -30,7 +30,6 @@ public class QueueFamilyRequirementsValidator { */ public Optional validate(PhysicalDevice physicalDevice) { var vkQueueFamilyProps = physicalDevice.getVkQueueFamilyProps(); - var queueFamilyIndicesBuilder = new QueueFamilyIndices.Builder(); for (int i = 0; i < vkQueueFamilyProps.capacity(); i++) { @@ -39,9 +38,11 @@ public class QueueFamilyRequirementsValidator { if (hasRequiredFlag(VK10.VK_QUEUE_GRAPHICS_BIT) && queueFlagIsSupported(vkQueueFamilyProp) && availableQueue > 0) { - queueFamilyIndicesBuilder.withGraphicsQueueFamilyIndex(i); - requiredQueueFlags &= ~VK10.VK_QUEUE_GRAPHICS_BIT; // Consume the flag - availableQueue--; + if (surface.isEmpty() || isSurfaceSupported(surface.get(), physicalDevice, i)) { + queueFamilyIndicesBuilder.withGraphicsQueueFamilyIndex(i); + requiredQueueFlags &= ~VK10.VK_QUEUE_GRAPHICS_BIT; // Consume the flag + availableQueue--; + } } if (hasRequiredFlag(VK10.VK_QUEUE_COMPUTE_BIT) && queueFlagIsSupported(vkQueueFamilyProp) @@ -55,22 +56,14 @@ public class QueueFamilyRequirementsValidator { && availableQueue > 0) { queueFamilyIndicesBuilder.withTransferQueueFamilyIndex(i); requiredQueueFlags &= ~VK10.VK_QUEUE_TRANSFER_BIT; // Consume the flag - availableQueue--; } - if (surface.isPresent() && isSurfaceSupported(surface.get(), physicalDevice, i) - && availableQueue > 0) { - queueFamilyIndicesBuilder.withPresentQueueFamilyIndex(i); - surface = Optional.empty(); // Consume the surface - availableQueue--; - } - - if (requiredQueueFlags == 0 && surface.isEmpty()) { + if (requiredQueueFlags == 0) { break; } } - if (requiredQueueFlags == 0 && surface.isEmpty()) { + if (requiredQueueFlags == 0) { return Optional.of(queueFamilyIndicesBuilder.build()); }