kotlin-graphics / vkk

VK², Kotlin Wrapper for Vulkan: code expressiveness and safety meet graphic power
Apache License 2.0
130 stars 7 forks source link

SIGSEGV in createDevice when using queuePriorities #2

Open joscha-alisch opened 4 years ago

joscha-alisch commented 4 years ago

Hi Folks,

I believe there is a bug with the priorities float buffer allocation in vk.DeviceQueueCreateInfo.

When doing the following the creation of a logical device fails with a SIGSEGV:

val queue = vk.DeviceQueueCreateInfo {
    queueFamilyIndex = graphics
    queuePriority = 1.0f
}

Results in

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x0000000122816a51, pid=88962, tid=0x0000000000000307
#
# JRE version: Java(TM) SE Runtime Environment (8.0_171-b11) (build 1.8.0_171-b11)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.171-b11 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# C  [libMoltenVK.dylib+0x56a51]

However, when I push the float buffer myself, everything works fine:

val queue = vk.DeviceQueueCreateInfo {
    queueFamilyIndex = graphics
    queuePriorities = stack.floats(1.0f)
}
elect86 commented 4 years ago

Hi joscha,

yeah, I also experienced lately those crashes. I wasnt getting any before.

I'm not sure exactly where the problem lies, however I'm going with another better approach: we keep everything on jvm until we have to interface the vulkan api natively. At that point we push all the jvm resources to the native memory-stack,

You can see it in action here.

I got the idea from playing with Swift, they implement a very similar concept with c strings: you are given a valid pointer to the underlaying char array which is assured to be valid for the whole closure/lambda. Everything is on Swift side until you have to interface c.

I'm using that same project as lab, but once finished I'll port all the work back to vk², hopefully in a few days

If you have any feedback, I'm here

ps: I'm also testing type safety for a couple of flag masks, let's see how that plays out

joscha-alisch commented 4 years ago

but once finished I'll port all the work back to vk²

Sounds good, looking forward to it 👍

I might push some PRs your way afterwards if it's fine. I've noticed some of the "convenience" functions missing where you don't have to deal with buffers yourself. But I'll wait until you've done that refactoring, it would probably be double the work otherwise :)

elect86 commented 4 years ago

Pushed, tmp branch

relevant:

I'm eager to gather feedbacks, I'll send you an invite for the PRs

elect86 commented 4 years ago

vk10 is complete (always tmp branch)

joscha-alisch commented 4 years ago

Hi @elect86 , sorry didn't have a chance to take a look yet. Will hopefully get to it on the weekend!

elect86 commented 4 years ago

Hi @joscha-alisch, news?