Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VK renderer backend causes NPE #114

Open
xtexChooser opened this issue Jan 14, 2022 · 6 comments
Open

VK renderer backend causes NPE #114

xtexChooser opened this issue Jan 14, 2022 · 6 comments
Assignees
Labels
type: bug Something isn't working

Comments

@xtexChooser
Copy link
Member

xtexChooser commented Jan 14, 2022

Log:

[20:01:07] [Engine/main] [INFO]: Initializing engine!
[20:01:07] [Engine/main] [INFO]: ----- System Information -----
[20:01:07] [Engine/main] [INFO]: 	Engine Version: 0.3.1-alpha
[20:01:07] [Engine/main] [INFO]: 	Engine Side: CLIENT
[20:01:07] [Engine/main] [INFO]: 	Runtime Environment: DEPLOYMENT
[20:01:07] [Engine/main] [INFO]: 	Operating System: Windows 10 (amd64) version 10.0
[20:01:07] [Engine/main] [INFO]: 	Java Version: 17.0.1 (17.0.1+12), Eclipse Adoptium
[20:01:07] [Engine/main] [INFO]: 	JVM Information: OpenJDK 64-Bit Server VM (mixed mode, sharing), Eclipse Adoptium
[20:01:07] [Engine/main] [INFO]: 	Max Heap Memory: 2130706432 bytes (2032 MB)
[20:01:07] [Engine/main] [INFO]: 	JVM Flags (1 totals): --add-opens=java.base/java.lang=ALL-UNNAMED
[20:01:07] [Engine/main] [INFO]: ------------------------------
[20:01:07] [Engine/main] [INFO]: Initializing client engine!
[20:01:07] [Engine/main] [INFO]: Initializing asset!
[20:01:07] [Engine/main] [INFO]: Initializing graphics!
[20:01:07] [Graphics/main] [INFO]: Graphics debug enable!
[20:01:07] [Graphics/main] [INFO]: Graphics backend: vulkan
[20:01:07] [Graphics/main] [INFO]: Initializing GLFW context!
[20:01:07] [Graphics/main] [INFO]: Initializing Vulkan instance!
[20:01:07] [Graphics/main] [INFO]: ----- Vulkan Information -----
[20:01:07] [Graphics/main] [INFO]: 	VK_VENDOR: NVIDIA
[20:01:07] [Graphics/main] [INFO]: 	VK_DEVICE: NVIDIA GeForce GTX 750 Ti
[20:01:07] [Graphics/main] [INFO]: 	VK_VERSION: 1.0.0
[20:01:07] [Graphics/main] [INFO]: 	VK_AVAILABLE_EXTENSIONS: VK_KHR_16bit_storage, VK_KHR_8bit_storage, VK_KHR_bind_memory2, VK_KHR_buffer_device_address, VK_KHR_copy_commands2, VK_KHR_create_renderpass2, VK_KHR_dedicated_allocation, VK_KHR_depth_stencil_resolve, VK_KHR_descriptor_update_template, VK_KHR_device_group, VK_KHR_draw_indirect_count, VK_KHR_driver_properties, VK_KHR_external_fence, VK_KHR_external_fence_win32, VK_KHR_external_memory, VK_KHR_external_memory_win32, VK_KHR_external_semaphore, VK_KHR_external_semaphore_win32, VK_KHR_get_memory_requirements2, VK_KHR_image_format_list, VK_KHR_imageless_framebuffer, VK_KHR_maintenance1, VK_KHR_maintenance2, VK_KHR_maintenance3, VK_KHR_multiview, VK_KHR_pipeline_executable_properties, VK_KHR_push_descriptor, VK_KHR_relaxed_block_layout, VK_KHR_sampler_mirror_clamp_to_edge, VK_KHR_sampler_ycbcr_conversion, VK_KHR_separate_depth_stencil_layouts, VK_KHR_shader_atomic_int64, VK_KHR_shader_clock, VK_KHR_shader_draw_parameters, VK_KHR_shader_float16_int8, VK_KHR_shader_float_controls, VK_KHR_shader_non_semantic_info, VK_KHR_shader_subgroup_extended_types, VK_KHR_shader_terminate_invocation, VK_KHR_spirv_1_4, VK_KHR_storage_buffer_storage_class, VK_KHR_swapchain, VK_KHR_swapchain_mutable_format, VK_KHR_synchronization2, VK_KHR_timeline_semaphore, VK_KHR_uniform_buffer_standard_layout, VK_KHR_variable_pointers, VK_KHR_vulkan_memory_model, VK_KHR_win32_keyed_mutex, VK_KHR_workgroup_memory_explicit_layout, VK_KHR_zero_initialize_workgroup_memory, VK_EXT_4444_formats, VK_EXT_blend_operation_advanced, VK_EXT_buffer_device_address, VK_EXT_calibrated_timestamps, VK_EXT_color_write_enable, VK_EXT_conditional_rendering, VK_EXT_custom_border_color, VK_EXT_depth_clip_enable, VK_EXT_depth_range_unrestricted, VK_EXT_descriptor_indexing, VK_EXT_discard_rectangles, VK_EXT_extended_dynamic_state, VK_EXT_extended_dynamic_state2, VK_EXT_external_memory_host, VK_EXT_full_screen_exclusive, VK_EXT_hdr_metadata, VK_EXT_host_query_reset, VK_EXT_image_robustness, VK_EXT_index_type_uint8, VK_EXT_inline_uniform_block, VK_EXT_line_rasterization, VK_EXT_memory_budget, VK_EXT_memory_priority, VK_EXT_pci_bus_info, VK_EXT_pipeline_creation_cache_control, VK_EXT_pipeline_creation_feedback, VK_EXT_private_data, VK_EXT_provoking_vertex, VK_EXT_robustness2, VK_EXT_scalar_block_layout, VK_EXT_separate_stencil_usage, VK_EXT_shader_atomic_float, VK_EXT_shader_demote_to_helper_invocation, VK_EXT_shader_image_atomic_int64, VK_EXT_shader_subgroup_ballot, VK_EXT_shader_subgroup_vote, VK_EXT_subgroup_size_control, VK_EXT_texel_buffer_alignment, VK_EXT_tooling_info, VK_EXT_transform_feedback, VK_EXT_vertex_attribute_divisor, VK_EXT_vertex_input_dynamic_state, VK_EXT_ycbcr_image_arrays, VK_NV_acquire_winrt_display, VK_NV_dedicated_allocation, VK_NV_dedicated_allocation_image_aliasing, VK_NV_device_diagnostic_checkpoints, VK_NV_device_diagnostics_config, VK_NV_device_generated_commands, VK_NV_external_memory, VK_NV_external_memory_win32, VK_NV_inherited_viewport_scissor, VK_NV_shader_sm_builtins, VK_NV_shader_subgroup_partitioned, VK_NV_win32_keyed_mutex, VK_NVX_multiview_per_view_attributes
[20:01:07] [Graphics/main] [INFO]: 	GPU_TOTAL_MEMORY: 6285 MB
[20:01:07] [Graphics/main] [INFO]: ------------------------------
[20:01:07] [Engine/main] [ERROR]: Caught unhandled exception!!! Engine will terminate!
[20:01:07] [Engine/main] [ERROR]: /////////////// CRASH ///////////////
[20:01:07] [Engine/main] [ERROR]: Thread: main
[20:01:07] [Engine/main] [ERROR]: (no message is provided from exception)
java.lang.NullPointerException: null
	at org.lwjgl.system.Checks.check(Checks.java:100)
	at org.lwjgl.util.vma.VmaAllocatorCreateInfo.validate(VmaAllocatorCreateInfo.java:367)
	at org.lwjgl.util.vma.Vma.vmaCreateAllocator(Vma.java:1557)
	at engine.graphics.vulkan.VulkanMemoryAllocator.createAllocator(VulkanMemoryAllocator.java:33)
	at engine.graphics.vulkan.VKGraphicsBackend.initVulkan(VKGraphicsBackend.java:220)
	at engine.graphics.vulkan.VKGraphicsBackend.init(VKGraphicsBackend.java:170)
	at engine.graphics.GraphicsEngine.start(GraphicsEngine.java:64)
	at engine.graphics.EngineGraphicsManager.initialize(EngineGraphicsManager.java:118)
	at engine.graphics.EngineGraphicsManager.<init>(EngineGraphicsManager.java:64)
	at engine.client.EngineClientImpl.resourceStage(EngineClientImpl.java:147)
	at engine.EngineBase.initEngine(EngineBase.java:102)
	at engine.client.launch.Bootstrap.main(Bootstrap.java:22)
[20:01:07] [Engine/main] [ERROR]: Generated crash report file at F:\Project\UnknownDomainGames\PanguEngine\client\build\install\client\bin\run\crashreport\Crash_2022-01-14_20-01-07_CLIENT.txt.

Crash report:

====== Crash Report ======

Time: 2022-01-14 20:01:07 +08:00

--- Exception Stack Traces ---
Thread: main
java.lang.NullPointerException
	at org.lwjgl.system.Checks.check(Checks.java:100)
	at org.lwjgl.util.vma.VmaAllocatorCreateInfo.validate(VmaAllocatorCreateInfo.java:367)
	at org.lwjgl.util.vma.Vma.vmaCreateAllocator(Vma.java:1557)
	at engine.graphics.vulkan.VulkanMemoryAllocator.createAllocator(VulkanMemoryAllocator.java:33)
	at engine.graphics.vulkan.VKGraphicsBackend.initVulkan(VKGraphicsBackend.java:220)
	at engine.graphics.vulkan.VKGraphicsBackend.init(VKGraphicsBackend.java:170)
	at engine.graphics.GraphicsEngine.start(GraphicsEngine.java:64)
	at engine.graphics.EngineGraphicsManager.initialize(EngineGraphicsManager.java:118)
	at engine.graphics.EngineGraphicsManager.<init>(EngineGraphicsManager.java:64)
	at engine.client.EngineClientImpl.resourceStage(EngineClientImpl.java:147)
	at engine.EngineBase.initEngine(EngineBase.java:102)
	at engine.client.launch.Bootstrap.main(Bootstrap.java:22)
----------------------------------------------------------------

--- Exception Details ---
----------------------------------------------------------------

--- System Details ---
Engine Version: 0.3.1-alpha
Engine Side: CLIENT
Runtime Environment: DEPLOYMENT
Loaded Mods: [engine(0.3.1-alpha)]
Operating System: Windows 10 (amd64) version 10.0
Java Version: 17.0.1 (17.0.1+12), 17.0.1
JVM Information: OpenJDK 64-Bit Server VM (mixed mode, sharing), Eclipse Adoptium
Heap Memory Usage: 16 MB / 128 MB (Max: 2032 MB)
Non Heap Memory Usage: 15 MB / -1 MB
JVM Flags: (1 totals) --add-opens=java.base/java.lang=ALL-UNNAMED
----------------------------------------------------------------

--- All Stack Traces ---
Thread: Notification Thread
Daemon: true
StackTrace:

Thread: Attach Listener
Daemon: true
StackTrace:

Thread: Signal Dispatcher
Daemon: true
StackTrace:

Thread: Common-Cleaner
Daemon: true
StackTrace:
	at [email protected]/java.lang.Object.wait(Native Method)
	at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
	at [email protected]/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140)
	at [email protected]/java.lang.Thread.run(Thread.java:833)
	at [email protected]/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:162)

Thread: Reference Handler
Daemon: true
StackTrace:
	at [email protected]/java.lang.ref.Reference.waitForReferencePendingList(Native Method)
	at [email protected]/java.lang.ref.Reference.processPendingReferences(Reference.java:253)
	at [email protected]/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:215)

Thread: Finalizer
Daemon: true
StackTrace:
	at [email protected]/java.lang.Object.wait(Native Method)
	at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155)
	at [email protected]/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:176)
	at [email protected]/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:172)


Here is the patch to enable VK backend:

 graphics/src/main/java/engine/graphics/GraphicsEngine.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/graphics/src/main/java/engine/graphics/GraphicsEngine.java b/graphics/src/main/java/engine/graphics/GraphicsEngine.java
index c0f2bf6..8f8e247 100644
--- a/graphics/src/main/java/engine/graphics/GraphicsEngine.java
+++ b/graphics/src/main/java/engine/graphics/GraphicsEngine.java
@@ -91,7 +91,7 @@ public final class GraphicsEngine {
     }
 
     public static class Settings {
-        private String backend = "opengl";
+        private String backend = "vulkan";
         private String imageLoader = "stb";
         private String fontManager = "stb";
 
@xtexChooser xtexChooser added the type: bug Something isn't working label Jan 14, 2022
@xtexChooser
Copy link
Member Author

See VmaAllocatorCreateInfo#367: long pVulkanFunctions = memGetAddress(struct + VmaAllocatorCreateInfo.PVULKANFUNCTIONS);

@xtexChooser
Copy link
Member Author

这是一个暂时性的修复:

 .../graphics/vulkan/VulkanMemoryAllocator.java     | 22 +++++++++++++++++++++-
 1 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/graphics/src/main/java/engine/graphics/vulkan/VulkanMemoryAllocator.java b/graphics/src/main/java/engine/graphics/vulkan/VulkanMemoryAllocator.java
index 3da57c7..b238a13 100644
--- a/graphics/src/main/java/engine/graphics/vulkan/VulkanMemoryAllocator.java
+++ b/graphics/src/main/java/engine/graphics/vulkan/VulkanMemoryAllocator.java
@@ -6,6 +6,8 @@ import org.lwjgl.system.MemoryStack;
 import org.lwjgl.util.vma.Vma;
 import org.lwjgl.util.vma.VmaAllocationCreateInfo;
 import org.lwjgl.util.vma.VmaAllocatorCreateInfo;
+import org.lwjgl.util.vma.VmaVulkanFunctions;
+import org.lwjgl.vulkan.VK;
 import org.lwjgl.vulkan.VK10;
 import org.lwjgl.vulkan.VkBufferCreateInfo;
 
@@ -28,7 +30,25 @@ public class VulkanMemoryAllocator {
         try(var stack = MemoryStack.stackPush()){
             var info = VmaAllocatorCreateInfo.callocStack(stack)
                     .physicalDevice(device.getPhysicalDevice().getNativePhysicalDevice())
-                    .device(device.getNativeDevice());
+                    .device(device.getNativeDevice())
+                    .pVulkanFunctions(VmaVulkanFunctions.callocStack(stack)
+                            .vkGetPhysicalDeviceProperties(VK10.vkGetInstanceProcAddr(device.getNativeDevice().getPhysicalDevice().getInstance(), stack.ASCII("vkGetPhysicalDeviceProperties")))
+                            .vkGetPhysicalDeviceMemoryProperties(VK10.vkGetInstanceProcAddr(device.getNativeDevice().getPhysicalDevice().getInstance(),stack.ASCII("vkGetPhysicalDeviceMemoryProperties")))
+                            .vkAllocateMemory(VK10.vkGetDeviceProcAddr(device.getNativeDevice(),stack.ASCII("vkAllocateMemory")))
+                            .vkFreeMemory(VK10.vkGetDeviceProcAddr(device.getNativeDevice(),stack.ASCII("vkFreeMemory")))
+                            .vkMapMemory(VK10.vkGetDeviceProcAddr(device.getNativeDevice(),stack.ASCII("vkMapMemory")))
+                            .vkUnmapMemory(VK10.vkGetDeviceProcAddr(device.getNativeDevice(),stack.ASCII("vkUnmapMemory")))
+                            .vkFlushMappedMemoryRanges(VK10.vkGetDeviceProcAddr(device.getNativeDevice(),stack.ASCII("vkFlushMappedMemoryRanges")))
+                            .vkInvalidateMappedMemoryRanges(VK10.vkGetDeviceProcAddr(device.getNativeDevice(),stack.ASCII("vkInvalidateMappedMemoryRanges")))
+                            .vkBindBufferMemory(VK10.vkGetDeviceProcAddr(device.getNativeDevice(),stack.ASCII("vkBindBufferMemory")))
+                            .vkBindImageMemory(VK10.vkGetDeviceProcAddr(device.getNativeDevice(),stack.ASCII("vkBindImageMemory")))
+                            .vkGetBufferMemoryRequirements(VK10.vkGetDeviceProcAddr(device.getNativeDevice(),stack.ASCII("vkGetBufferMemoryRequirements")))
+                            .vkGetImageMemoryRequirements(VK10.vkGetDeviceProcAddr(device.getNativeDevice(),stack.ASCII("vkGetImageMemoryRequirements")))
+                            .vkCreateBuffer(VK10.vkGetDeviceProcAddr(device.getNativeDevice(),stack.ASCII("vkCreateBuffer")))
+                            .vkDestroyBuffer(VK10.vkGetDeviceProcAddr(device.getNativeDevice(),stack.ASCII("vkDestroyBuffer")))
+                            .vkCreateImage(VK10.vkGetDeviceProcAddr(device.getNativeDevice(),stack.ASCII("vkCreateImage")))
+                            .vkDestroyImage(VK10.vkGetDeviceProcAddr(device.getNativeDevice(),stack.ASCII("vkDestroyImage")))
+                            .vkCmdCopyBuffer(VK10.vkGetDeviceProcAddr(device.getNativeDevice(),stack.ASCII("vkCmdCopyBuffer"))));
             var ptr = stack.mallocPointer(1);
             var err = Vma.vmaCreateAllocator(info, ptr);
             if(err != VK_SUCCESS){

@mouse0w0
没有直接提交是因为:(*****************)

[20:41:56] [Engine/main] [ERROR]: Queue from QueueFamily#0 out of bound. size: 0 index: 0
java.lang.IllegalArgumentException: Queue from QueueFamily#0 out of bound. size: 0 index: 0
        at engine.graphics.vulkan.device.LogicalDevice.getQueue(LogicalDevice.java:95)
        at engine.graphics.vulkan.VKGraphicsBackend.initVulkan(VKGraphicsBackend.java:222)
        at engine.graphics.vulkan.VKGraphicsBackend.init(VKGraphicsBackend.java:170)
        at engine.graphics.GraphicsEngine.start(GraphicsEngine.java:64)
        at engine.graphics.EngineGraphicsManager.initialize(EngineGraphicsManager.java:118)
        at engine.graphics.EngineGraphicsManager.<init>(EngineGraphicsManager.java:64)
        at engine.client.EngineClientImpl.resourceStage(EngineClientImpl.java:147)
        at engine.EngineBase.initEngine(EngineBase.java:102)
        at engine.client.launch.Bootstrap.main(Bootstrap.java:22)
[20:41:56] [Engine/main] [ERROR]: Generated crash report file at F:\Project\UnknownDomainGames\PanguEngine\client\run\crashreport\Crash_2022-01-14_20-41-56_CLIENT.txt.

@mouse0w0
Copy link
Member

这咋整啊

@xtexChooser
Copy link
Member Author

这咋整啊

修啊((((

@mouse0w0
Copy link
Member

Vulkan实现的维护者是@cvrunmin,现在这个光荣的任务就交给你们了。

@enesaltinkaya
Copy link

        VmaAllocatorCreateInfo allocatorInfo = VmaAllocatorCreateInfo.calloc();
        allocatorInfo.physicalDevice(_chosenGPU);
        allocatorInfo.device(_device);
        allocatorInfo.instance(_instance);

        VmaVulkanFunctions vmaVulkanFunctions = VmaVulkanFunctions.calloc().set(_instance, _device);
        allocatorInfo.pVulkanFunctions(vmaVulkanFunctions);

I think you need those last 2 lines of code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants