From 015c5aaa84c300e8109c9a1924d7a6cbe1e8672a Mon Sep 17 00:00:00 2001 From: Halbear Date: Mon, 19 Jan 2026 18:41:30 +0000 Subject: [PATCH] Wrapped up graphics Queues --- .../Terrain4J/EngineCore/Display/Render.java | 2 +- .../EngineCore/Logic/VulkanContext.java | 8 +++-- .../EngineCore/Vulkan/Structure/Queue.java | 34 +++++++++++++++++++ 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Render.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Render.java index 8ddc853..d62a0ed 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Render.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Display/Render.java @@ -6,7 +6,7 @@ import net.halbear.Terrain4J.EngineCore.Logic.VulkanContext; public class Render { private final VulkanContext RendererContext; public Render(EngineInstance engineInstance) { - RendererContext = new VulkanContext(); + RendererContext = new VulkanContext(engineInstance.window()); } public void cleanup() { RendererContext.cleanup(); diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/VulkanContext.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/VulkanContext.java index 44bd663..1fc75d5 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/VulkanContext.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Logic/VulkanContext.java @@ -1,5 +1,6 @@ package net.halbear.Terrain4J.EngineCore.Logic; +import net.halbear.Terrain4J.EngineCore.Display.Window; import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Device; import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.PhysicalDevice; import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.Surface; @@ -11,11 +12,12 @@ public class VulkanContext { private Surface surface; private final PhysicalDevice PhysDevice; - public VulkanContext(){ + public VulkanContext(Window window){ var EngineGlobals = EngineConfig.getInstance(); Instance = new VulkanInstance(EngineGlobals.VkValidated()); - PhysDevice = PhysicalDevice.createPhysicalDevice(Instance,EngineGlobals.getPhysDeviceName()); - + PhysDevice = PhysicalDevice.createPhysicalDevice(Instance,EngineGlobals.GetPhysicalDeviceName()); + device = new Device(PhysDevice); + surface = new Surface(Instance, PhysDevice, window); } public void cleanup(){ diff --git a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/Queue.java b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/Queue.java index 7a81b58..6d843f9 100644 --- a/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/Queue.java +++ b/src/main/java/net/halbear/Terrain4J/EngineCore/Vulkan/Structure/Queue.java @@ -4,6 +4,7 @@ import net.halbear.Terrain4J.EngineCore.Logic.VulkanContext; import org.lwjgl.PointerBuffer; import org.lwjgl.system.MemoryStack; import org.lwjgl.vulkan.VkQueue; +import org.lwjgl.vulkan.VkQueueFamilyProperties; import org.tinylog.Logger; import static org.lwjgl.vulkan.VK13.*; @@ -23,4 +24,37 @@ public class Queue { VulkanQueue = new VkQueue(Queue, vkContext.GetDevice().FetchVulkanDevice()); } } + public int GetQueueFamilyIndex(){ + return QueueFamilyIndex; + } + public VkQueue GetVulkanQueue(){ + return VulkanQueue; + } + public void WaitIdle(){ + vkQueueWaitIdle(VulkanQueue); + } + + public static class GraphicsQueue extends Queue { + public GraphicsQueue(VulkanContext vulkanContext, int QueueIndex){ + super(vulkanContext, GetGraphicsQueueFamilyIndex(vulkanContext),QueueIndex); + } + private static int GetGraphicsQueueFamilyIndex(VulkanContext vulkanContext){ + int index = -1; + var QueuePropertiesBuffer = vulkanContext.GetPhysicalDevice().GetQueueFamilyProperties(); + int QueueFamilyCount = QueuePropertiesBuffer.capacity(); + for(int i = 0; i < QueueFamilyCount; i++){ + VkQueueFamilyProperties Properties = QueuePropertiesBuffer.get(i); + boolean GraphicsQueue = (Properties.queueFlags() & VK_QUEUE_GRAPHICS_BIT)!= 0; + if (GraphicsQueue){ + index = i; + break; + } + } + if (index < 0){ + throw new RuntimeException("Failed to fetch graphics queue family"); + } + return index; + } + } + }