Need Help Creating My First Mesh

Im in the process of migrating my openGL engine to Vulkan (LWJGL bindings) , using RenderDoc for debugging, I’m currently stuck in the FrameBuffer stage in the deferred rendering pipeline, which all it does is generate an empty color attachment image and depth attachment image.

My engine is setup like this: I generate a mesh in a deferred renderer, pass it as a color attachment and have the swapchain with its given images generate the mesh image over a quad, passing the mesh image view id in the description set layout.

Can someone provide me with some tips on the subpasses and subpass dependencies for the deferred and swapchain renderpass. Thank you!

My deferred render framebuffer:

public class SingleWithDepthAttachmentFbo extends VkFrameBufferObject {

public SingleWithDepthAttachmentFbo(VkDevice device,
                           VkPhysicalDeviceMemoryProperties memoryProperties) {

    width = VkDisplay.getInstance().getParameters().getWidth();
    height = VkDisplay.getInstance().getParameters().getHeight();

    VkImageBundle colorAttachment = new FrameBufferColorAttachment(device, memoryProperties,
            width, height, VK_FORMAT_R16G16B16A16_SFLOAT, 1);

    VkImageBundle depthBuffer = new FrameBufferDepthAttachment(device, memoryProperties,
            width, height, VK_FORMAT_D32_SFLOAT, 1);

    attachments.put(Attachment.COLOR, colorAttachment);
    attachments.put(Attachment.DEPTH, depthBuffer);

    renderPass = new VkRenderPass(device);
    
    renderPass.addColorAttachment(0, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
            VK_FORMAT_R16G16B16A16_SFLOAT, 1, VK_IMAGE_LAYOUT_UNDEFINED,
            VK_IMAGE_LAYOUT_GENERAL);
    renderPass.addDepthAttachment(1, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
            VK_FORMAT_D32_SFLOAT, 1, VK_IMAGE_LAYOUT_UNDEFINED,
            VK_IMAGE_LAYOUT_GENERAL);

    renderPass.addSubpassDependency(VK_SUBPASS_EXTERNAL, 0,
            VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
            VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
            VK_ACCESS_MEMORY_READ_BIT,
            VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
            VK_DEPENDENCY_BY_REGION_BIT);

    renderPass.addSubpassDependency(0, VK_SUBPASS_EXTERNAL,
            VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
            VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
            VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
            VK_ACCESS_MEMORY_READ_BIT,
            VK_DEPENDENCY_BY_REGION_BIT);

    renderPass.createSubpass();
    renderPass.createRenderPass();

    depthAttachmentCount = 1;
    colorAttachmentCount = renderPass.getAttachmentCount() - depthAttachmentCount;

    LongBuffer pImageViews = memAllocLong(renderPass.getAttachmentCount());
    pImageViews.put(0, attachments.get(Attachment.COLOR).getImageView().getId());
    pImageViews.put(1, attachments.get(Attachment.DEPTH).getImageView().getId());

    frameBuffer = new VkFrameBuffer(device, width, height, 1, pImageViews, renderPass.getId());
}

}

Swapchain class:

public void createDescriptor(LogicalDevice logicalDevice, long descriptorPool, long imageView) {

    descriptorSetLayout = new DescriptorSetLayout(logicalDevice.getHandle(), 1);
    descriptorSetLayout.addLayoutBinding(0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
            VK_SHADER_STAGE_FRAGMENT_BIT);
    descriptorSetLayout.create(null);

    sampler = new VkSampler(logicalDevice.getHandle(), VK_FILTER_NEAREST, false, 0,
            VK_SAMPLER_MIPMAP_MODE_NEAREST, 0, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE);

    descriptorSet = new DescriptorSet(logicalDevice.getHandle(), descriptorPool, descriptorSetLayout.getHandlePointer());
    descriptorSet.updateDescriptorImageBuffer(imageView, VK_IMAGE_LAYOUT_GENERAL,
            sampler.getId(), 0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER);
}

public void createRenderPass(LogicalDevice logicalDevice, int imageFormat) {

    renderPass = new VkRenderPass(logicalDevice.getHandle());
    renderPass.addColorAttachment(0, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, imageFormat, 1,
            VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR);
    renderPass.addSubpassDependency(VK_SUBPASS_EXTERNAL, 0, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
            VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0,
            VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, 0);
    renderPass.createSubpass();
    renderPass.createRenderPass();
}

This topic was automatically closed 183 days after the last reply. New replies are no longer allowed.