Queue: Add support of pritority + Fix bad Queue index by family
This commit is contained in:
parent
fe685a377f
commit
4ce051b0f5
1 changed files with 21 additions and 9 deletions
|
@ -1,14 +1,16 @@
|
||||||
package fr.mrdev023.vulkan_java.vk;
|
package fr.mrdev023.vulkan_java.vk;
|
||||||
|
|
||||||
import java.nio.FloatBuffer;
|
import java.nio.FloatBuffer;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.lwjgl.system.MemoryStack;
|
import org.lwjgl.system.MemoryStack;
|
||||||
import org.lwjgl.vulkan.VK10;
|
import org.lwjgl.vulkan.VK10;
|
||||||
import org.lwjgl.vulkan.VkDeviceQueueCreateInfo;
|
import org.lwjgl.vulkan.VkDeviceQueueCreateInfo;
|
||||||
|
|
||||||
public class QueuesCreator {
|
public class QueuesCreator {
|
||||||
private final HashMap<Integer, Integer> families;
|
private final HashMap<Integer, List<Float>> families;
|
||||||
private HashMap<Integer, Integer> counters;
|
private HashMap<Integer, Integer> counters;
|
||||||
|
|
||||||
public QueuesCreator(QueueFamilyIndices queueFamilyIndices) {
|
public QueuesCreator(QueueFamilyIndices queueFamilyIndices) {
|
||||||
|
@ -26,7 +28,11 @@ public class QueuesCreator {
|
||||||
stack);
|
stack);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (var familyIndex : families.keySet()) {
|
for (var familyIndex : families.keySet()) {
|
||||||
FloatBuffer priorities = stack.callocFloat(families.get(familyIndex));
|
FloatBuffer priorities = stack.callocFloat(families.get(familyIndex).size());
|
||||||
|
for (var priority : families.get(familyIndex)) {
|
||||||
|
priorities.put(priority);
|
||||||
|
}
|
||||||
|
priorities.flip();
|
||||||
queueCreationInfoBuf.get(i)
|
queueCreationInfoBuf.get(i)
|
||||||
.sType(VK10.VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO)
|
.sType(VK10.VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO)
|
||||||
.queueFamilyIndex(familyIndex)
|
.queueFamilyIndex(familyIndex)
|
||||||
|
@ -43,29 +49,35 @@ public class QueuesCreator {
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getNextAvailableQueueIndexForFamilyIndex(int queueFamilyIndex) {
|
private int getNextAvailableQueueIndexForFamilyIndex(int queueFamilyIndex) {
|
||||||
var max = families.getOrDefault(queueFamilyIndex, 0);
|
var max = families.get(queueFamilyIndex).size();
|
||||||
var current = counters.getOrDefault(queueFamilyIndex, 0);
|
var current = counters.getOrDefault(queueFamilyIndex, 0);
|
||||||
if (current >= max) {
|
if (current >= max) {
|
||||||
throw new RuntimeException("No more queues available for family " + queueFamilyIndex);
|
throw new RuntimeException("No more queues available for family " + queueFamilyIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
counters.put(queueFamilyIndex, current + 1);
|
counters.put(queueFamilyIndex, current + 1);
|
||||||
return current + 1;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
private HashMap<Integer, Integer> createFamilies(QueueFamilyIndices queueFamilyIndices) {
|
private HashMap<Integer, List<Float>> createFamilies(QueueFamilyIndices queueFamilyIndices) {
|
||||||
var families = new HashMap<Integer, Integer>();
|
var families = new HashMap<Integer, List<Float>>();
|
||||||
if (queueFamilyIndices.getGraphicsQueueFamilyIndex().isPresent()) {
|
if (queueFamilyIndices.getGraphicsQueueFamilyIndex().isPresent()) {
|
||||||
var familyIndex = queueFamilyIndices.getGraphicsQueueFamilyIndex().get();
|
var familyIndex = queueFamilyIndices.getGraphicsQueueFamilyIndex().get();
|
||||||
families.put(familyIndex, families.getOrDefault(familyIndex, 0) + 1);
|
var familyPriorities = families.getOrDefault(familyIndex, new ArrayList<Float>());
|
||||||
|
familyPriorities.add(1.0f);
|
||||||
|
families.put(familyIndex, familyPriorities);
|
||||||
}
|
}
|
||||||
if (queueFamilyIndices.getComputeQueueFamilyIndex().isPresent()) {
|
if (queueFamilyIndices.getComputeQueueFamilyIndex().isPresent()) {
|
||||||
var familyIndex = queueFamilyIndices.getComputeQueueFamilyIndex().get();
|
var familyIndex = queueFamilyIndices.getComputeQueueFamilyIndex().get();
|
||||||
families.put(familyIndex, families.getOrDefault(familyIndex, 0) + 1);
|
var familyPriorities = families.getOrDefault(familyIndex, new ArrayList<Float>());
|
||||||
|
familyPriorities.add(0.5f);
|
||||||
|
families.put(familyIndex, familyPriorities);
|
||||||
}
|
}
|
||||||
if (queueFamilyIndices.getTransferQueueFamilyIndex().isPresent()) {
|
if (queueFamilyIndices.getTransferQueueFamilyIndex().isPresent()) {
|
||||||
var familyIndex = queueFamilyIndices.getTransferQueueFamilyIndex().get();
|
var familyIndex = queueFamilyIndices.getTransferQueueFamilyIndex().get();
|
||||||
families.put(familyIndex, families.getOrDefault(familyIndex, 0) + 1);
|
var familyPriorities = families.getOrDefault(familyIndex, new ArrayList<Float>());
|
||||||
|
familyPriorities.add(0.5f);
|
||||||
|
families.put(familyIndex, familyPriorities);
|
||||||
}
|
}
|
||||||
return families;
|
return families;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue