Queue: Don't allocate dedicate presentation queue (use graphics queue for it)
This commit is contained in:
parent
d26695607b
commit
fe685a377f
5 changed files with 9 additions and 43 deletions
|
@ -21,7 +21,6 @@ public class Device {
|
|||
|
||||
private final PhysicalDevice physicalDevice;
|
||||
private final VkDevice vkDevice;
|
||||
private final Optional<Queue> presentQueue;
|
||||
private final Optional<Queue> graphicsQueue;
|
||||
private final Optional<Queue> computeQueue;
|
||||
private final Optional<Queue> 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<Queue> getPresentQueue() {
|
||||
return presentQueue;
|
||||
}
|
||||
|
||||
public Optional<Queue> getGraphicsQueue() {
|
||||
return graphicsQueue;
|
||||
}
|
||||
|
|
|
@ -1,20 +1,17 @@
|
|||
package fr.mrdev023.vulkan_java.vk;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Optional;
|
||||
|
||||
public class QueueFamilyIndices {
|
||||
private final Optional<Integer> graphicsQueueFamilyIndex;
|
||||
private final Optional<Integer> computeQueueFamilyIndex;
|
||||
private final Optional<Integer> transferQueueFamilyIndex;
|
||||
private final Optional<Integer> presentQueueFamilyIndex;
|
||||
|
||||
public QueueFamilyIndices(Optional<Integer> graphicsQueueFamilyIndex, Optional<Integer> computeQueueFamilyIndex,
|
||||
Optional<Integer> transferQueueFamilyIndex, Optional<Integer> presentQueueFamilyIndex) {
|
||||
Optional<Integer> transferQueueFamilyIndex) {
|
||||
this.graphicsQueueFamilyIndex = graphicsQueueFamilyIndex;
|
||||
this.computeQueueFamilyIndex = computeQueueFamilyIndex;
|
||||
this.transferQueueFamilyIndex = transferQueueFamilyIndex;
|
||||
this.presentQueueFamilyIndex = presentQueueFamilyIndex;
|
||||
}
|
||||
|
||||
public Optional<Integer> getGraphicsQueueFamilyIndex() {
|
||||
|
@ -29,15 +26,10 @@ public class QueueFamilyIndices {
|
|||
return transferQueueFamilyIndex;
|
||||
}
|
||||
|
||||
public Optional<Integer> getPresentQueueFamilyIndex() {
|
||||
return presentQueueFamilyIndex;
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
private Optional<Integer> graphicsQueueFamilyIndex;
|
||||
private Optional<Integer> computeQueueFamilyIndex;
|
||||
private Optional<Integer> transferQueueFamilyIndex;
|
||||
private Optional<Integer> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -30,7 +30,6 @@ public class QueueFamilyRequirementsValidator {
|
|||
*/
|
||||
public Optional<QueueFamilyIndices> 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());
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue