Vulkan shader creation crash

Started by darkyellow, June 14, 2019, 08:59:13

Previous topic - Next topic

darkyellow

Hi

I get a full crash when trying to create my shaders in vulkan

Stack: [0x00007ff574677000,0x00007ff574778000],  sp=0x00007ff574773fe8,  free space=1011k
Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libVkLayer_khronos_validation.so+0x7d35e4]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  org.lwjgl.system.JNI.callPPPPI(JJJJJ)I+0
j  org.lwjgl.vulkan.VK10.nvkCreateShaderModule(Lorg/lwjgl/vulkan/VkDevice;JJJ)I+39
j  org.lwjgl.vulkan.VK10.vkCreateShaderModule(Lorg/lwjgl/vulkan/VkDevice;Lorg/lwjgl/vulkan/VkShaderModuleCreateInfo;Lorg/lwjgl/vulkan/VkAllocationCallbacks;Ljava/nio/LongBuffer;)I+24
j  mycode.VkShader.createShaderStages()V+108

I have successfully compiled my shader using glslangValidator -V and this is my code to load the shader

       LongBuffer shaderModuleBuffer = memAllocLong(1);
        shaderStages = VkPipelineShaderStageCreateInfo.calloc(shaderInfo.shaderCount());

        VkShaderModuleCreateInfo createInfoShaderModuleVertex = VkShaderModuleCreateInfo.calloc()
                .sType(VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
                .pCode(shaderInfo.getVertexShaderBuffer())
                .flags(0);
        errorCheck("", vkCreateShaderModule(logicalDevice.getLogicalDevice(), createInfoShaderModuleVertex, null, shaderModuleBuffer));


The byte buffer with the pCode matches the size of whats on the os (so giving confidence its the same), it is also flipped correctly. The toString of it is "java.nio.HeapByteBuffer[pos=0 lim=2436 cap=2436]". Other parts of the vulkan code are working fine (like image creation,  validation, swap chain creation etc)

When turning off the validation layers I get

Stack: [0x00007fd111ce6000,0x00007fd111de7000],  sp=0x00007fd111de4e48,  free space=1019k
Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libc.so.6+0x189291]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  org.lwjgl.system.JNI.callPPPPI(JJJJJ)I+0
j  org.lwjgl.vulkan.VK10.nvkCreateShaderModule(Lorg/lwjgl/vulkan/VkDevice;JJJ)I+39
j  org.lwjgl.vulkan.VK10.vkCreateShaderModule(Lorg/lwjgl/vulkan/VkDevice;Lorg/lwjgl/vulkan/VkShaderModuleCreateInfo;Lorg/lwjgl/vulkan/VkAllocationCallbacks;Ljava/nio/LongBuffer;)I+24
j  mycode.VkShader.createShaderStages()V+108

Do you have any ideas what is going wrong? Would incorrect byte data cause the crash?

spasi

The problem is java.nio.HeapByteBuffer. LWJGL requires direct/off-heap buffers everywhere.

darkyellow

Thanks, that was a bit of a school boy error! I had a ByteBuffer.wrap somewhere which needed fixing.