working on vulkan device layers
This commit is contained in:
parent
e07da41f27
commit
773f02f11d
10 changed files with 140 additions and 10 deletions
|
|
@ -1,15 +1,17 @@
|
|||
package net.halbear.Terrain4J.EngineCore.Display;
|
||||
|
||||
import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance;
|
||||
import net.halbear.Terrain4J.EngineCore.Logic.VulkanContext;
|
||||
|
||||
public class Render {
|
||||
private final VulkanContext RendererContext;
|
||||
public Render(EngineInstance engineInstance) {
|
||||
|
||||
RendererContext = new VulkanContext();
|
||||
}
|
||||
public void cleanup() {
|
||||
|
||||
RendererContext.cleanup();
|
||||
}
|
||||
public void render(EngineInstance engineInstance) {
|
||||
public void render(EngineInstance engineInstance){
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,26 +4,29 @@ import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils;
|
|||
import org.lwjgl.PointerBuffer;
|
||||
import org.lwjgl.glfw.GLFWVulkan;
|
||||
import org.lwjgl.system.MemoryStack;
|
||||
import org.lwjgl.vulkan.EXTDebugUtils;
|
||||
import org.lwjgl.vulkan.VkApplicationInfo;
|
||||
import org.lwjgl.vulkan.VkExtensionProperties;
|
||||
import org.lwjgl.vulkan.VkLayerProperties;
|
||||
import org.lwjgl.vulkan.*;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.IntBuffer;
|
||||
import java.nio.LongBuffer;
|
||||
import java.security.cert.Extension;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import static org.lwjgl.vulkan.VK10.vkEnumerateInstanceExtensionProperties;
|
||||
import static org.lwjgl.vulkan.VK10.vkEnumerateInstanceLayerProperties;
|
||||
import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck;
|
||||
import static org.lwjgl.vulkan.EXTDebugUtils.vkCreateDebugUtilsMessengerEXT;
|
||||
import static org.lwjgl.vulkan.EXTDebugUtils.vkDestroyDebugUtilsMessengerEXT;
|
||||
import static org.lwjgl.vulkan.VK10.*;
|
||||
import static org.lwjgl.vulkan.VK14.VK_API_VERSION_1_4;
|
||||
|
||||
|
||||
public class VulkanInstance {
|
||||
private static final String VALIDATION_LAYER = "VK_LAYER_KHRONOS_validation";
|
||||
private static final String PORTABILITY_EXTENSION = "VK_KHR_portability_enumeration";
|
||||
private static VkInstance vkInstance;
|
||||
|
||||
public VulkanInstance(boolean validate){
|
||||
try (MemoryStack MemStack = MemoryStack.stackPush()) {
|
||||
|
|
@ -69,6 +72,17 @@ public class VulkanInstance {
|
|||
RequiredExtensions.put(ExtraExtensions.get(i));
|
||||
}
|
||||
RequiredExtensions.flip();
|
||||
var InstanceInfo = VkInstanceCreateInfo.calloc(MemStack)
|
||||
.sType$Default()
|
||||
.pApplicationInfo(appInfo)
|
||||
.ppEnabledLayerNames(RequiredLayers)
|
||||
.ppEnabledExtensionNames(RequiredExtensions);
|
||||
if(CrossPlatform){
|
||||
InstanceInfo.flags(0x00000001);
|
||||
}
|
||||
PointerBuffer PointerInstance = MemStack.mallocPointer(1);
|
||||
vkCheck(vkCreateInstance(InstanceInfo,null,PointerInstance), "Error Creating Vulkan Instance");
|
||||
vkInstance = new VkInstance(PointerInstance.get(0),InstanceInfo);
|
||||
}
|
||||
}
|
||||
private Set<String> getSupportedInstanceExtensions(){
|
||||
|
|
@ -108,4 +122,11 @@ public class VulkanInstance {
|
|||
return LayersToUse;
|
||||
}
|
||||
}
|
||||
public void cleanup() {
|
||||
vkDestroyInstance(vkInstance, null);
|
||||
}
|
||||
|
||||
public VkInstance getVkInstance() {
|
||||
return vkInstance;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ public class Globals {
|
|||
public static int FrameRate_RENDER =0;
|
||||
public static int RENDERFRAMES =0;
|
||||
public static boolean VSYNC = false;
|
||||
private boolean vkValidated;
|
||||
|
||||
|
||||
private Globals() {
|
||||
|
|
@ -66,7 +67,11 @@ public class Globals {
|
|||
accuracy = DEFAULT_ACCURACY;
|
||||
TickRate = DEFAULT_TICKRATE;
|
||||
}
|
||||
vkValidated = Boolean.parseBoolean(EngineConfig.getOrDefault("vkValidated", false).toString());
|
||||
}
|
||||
|
||||
public boolean VkValidated(){
|
||||
return vkValidated;
|
||||
}
|
||||
|
||||
public static synchronized Globals getInstance() {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
package net.halbear.Terrain4J.EngineCore.Logic;
|
||||
|
||||
import net.halbear.Terrain4J.EngineCore.Display.VulkanInstance;
|
||||
|
||||
public class VulkanContext {
|
||||
private final VulkanInstance Instance;
|
||||
public VulkanContext(){
|
||||
var EngineGlobals = Globals.getInstance();
|
||||
Instance = new VulkanInstance(EngineGlobals.VkValidated());
|
||||
}
|
||||
|
||||
public void cleanup(){
|
||||
Instance.cleanup();
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,8 @@ package net.halbear.Terrain4J.EngineCore.Vulkan.Util;
|
|||
|
||||
import java.util.Locale;
|
||||
|
||||
import static org.lwjgl.vulkan.VK10.*;
|
||||
|
||||
public class VulkanUtils {
|
||||
public enum OSType {WINDOWS, MACOS, LINUX, UNSUPPORTED}
|
||||
public static OSType getOS() {
|
||||
|
|
@ -18,4 +20,31 @@ public class VulkanUtils {
|
|||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void vkCheck(int err, String errMsg) {
|
||||
if (err != VK_SUCCESS) {
|
||||
String errCode = switch (err) {
|
||||
case VK_NOT_READY -> "VK_NOT_READY";
|
||||
case VK_TIMEOUT -> "VK_TIMEOUT";
|
||||
case VK_EVENT_SET -> "VK_EVENT_SET";
|
||||
case VK_EVENT_RESET -> "VK_EVENT_RESET";
|
||||
case VK_INCOMPLETE -> "VK_INCOMPLETE";
|
||||
case VK_ERROR_OUT_OF_HOST_MEMORY -> "VK_ERROR_OUT_OF_HOST_MEMORY";
|
||||
case VK_ERROR_OUT_OF_DEVICE_MEMORY -> "VK_ERROR_OUT_OF_DEVICE_MEMORY";
|
||||
case VK_ERROR_INITIALIZATION_FAILED -> "VK_ERROR_INITIALIZATION_FAILED";
|
||||
case VK_ERROR_DEVICE_LOST -> "VK_ERROR_DEVICE_LOST";
|
||||
case VK_ERROR_MEMORY_MAP_FAILED -> "VK_ERROR_MEMORY_MAP_FAILED";
|
||||
case VK_ERROR_LAYER_NOT_PRESENT -> "VK_ERROR_LAYER_NOT_PRESENT";
|
||||
case VK_ERROR_EXTENSION_NOT_PRESENT -> "VK_ERROR_EXTENSION_NOT_PRESENT";
|
||||
case VK_ERROR_FEATURE_NOT_PRESENT -> "VK_ERROR_FEATURE_NOT_PRESENT";
|
||||
case VK_ERROR_INCOMPATIBLE_DRIVER -> "VK_ERROR_INCOMPATIBLE_DRIVER";
|
||||
case VK_ERROR_TOO_MANY_OBJECTS -> "VK_ERROR_TOO_MANY_OBJECTS";
|
||||
case VK_ERROR_FORMAT_NOT_SUPPORTED -> "VK_ERROR_FORMAT_NOT_SUPPORTED";
|
||||
case VK_ERROR_FRAGMENTED_POOL -> "VK_ERROR_FRAGMENTED_POOL";
|
||||
case VK_ERROR_UNKNOWN -> "VK_ERROR_UNKNOWN";
|
||||
default -> "Not mapped";
|
||||
};
|
||||
throw new RuntimeException(errMsg + ": " + errCode + " [" + err + "]");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,4 @@
|
|||
package net.halbear.Terrain4J.EngineCore.VulkanDeviceManagement;
|
||||
|
||||
public class Device {
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
package net.halbear.Terrain4J.EngineCore.VulkanDeviceManagement;
|
||||
|
||||
import net.halbear.Terrain4J.EngineCore.Display.VulkanInstance;
|
||||
import org.lwjgl.PointerBuffer;
|
||||
import org.lwjgl.system.MemoryStack;
|
||||
import org.lwjgl.vulkan.VkPhysicalDevice;
|
||||
|
||||
import java.nio.IntBuffer;
|
||||
import java.sql.Array;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils.vkCheck;
|
||||
import static org.lwjgl.vulkan.VK10.vkEnumeratePhysicalDevices;
|
||||
|
||||
public class PhysicalDevice {
|
||||
|
||||
private PhysicalDevice(VkPhysicalDevice VulkanPhysicalDevice){
|
||||
|
||||
}
|
||||
|
||||
public static PhysicalDevice createPhysicalDevice(VulkanInstance instance, String PreferredDeviceName){
|
||||
PhysicalDevice result = null;
|
||||
try (var MemStack = MemoryStack.stackPush()){
|
||||
PointerBuffer PointerPhyiscalDevices = getPhysicalDevices(instance, MemStack);
|
||||
int DeviceCount = PointerPhyiscalDevices.capacity();
|
||||
|
||||
var physDevices = new ArrayList<PhysicalDevice>();
|
||||
for(int i = 0; i < DeviceCount; i++){
|
||||
var vkPhysicalDevice = new VkPhysicalDevice(PointerPhyiscalDevices.get(i),instance.getVkInstance());
|
||||
var PhysDevice = new PhysicalDevice(vkPhysicalDevice);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static PointerBuffer getPhysicalDevices(VulkanInstance instance, MemoryStack MemStack){
|
||||
PointerBuffer PointerPhysicalDevices;
|
||||
IntBuffer intBuffer = MemStack.mallocInt(1);
|
||||
vkCheck(vkEnumeratePhysicalDevices(instance.getVkInstance(),intBuffer,null),"Failed to fetch physical device count");
|
||||
int DeviceCount = intBuffer.get(0);
|
||||
PointerPhysicalDevices = MemStack.mallocPointer(DeviceCount);
|
||||
vkCheck(vkEnumeratePhysicalDevices(instance.getVkInstance(),intBuffer,PointerPhysicalDevices),"Failed to fetch physical devices");
|
||||
return PointerPhysicalDevices;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
package net.halbear.Terrain4J.EngineCore.VulkanDeviceManagement;
|
||||
|
||||
public class Queue {
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
package net.halbear.Terrain4J.EngineCore.VulkanDeviceManagement;
|
||||
|
||||
public class Surface {
|
||||
}
|
||||
|
|
@ -3,5 +3,6 @@
|
|||
display_height=480
|
||||
display_width=640
|
||||
frame_accuracy=0
|
||||
main_tick_rate=60
|
||||
main_tick_rate=120
|
||||
vsync=false
|
||||
vkValidated=true
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue