Home > Net >  vkCreateRenderPass returns invalid pointer
vkCreateRenderPass returns invalid pointer

Time:06-19

I am creating a render pass like so

const bool createRenderPass() {
 VkAttachmentDescription colorAttachment{};
 colorAttachment.format = swapChainImageFormat;
 colorAttachment.samples = VK_SAMPLE_COUNT_1_BIT;
 colorAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
 colorAttachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE;
 colorAttachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
 colorAttachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
 colorAttachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
 colorAttachment.finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
 VkAttachmentReference colorAttachmentRef{};
 colorAttachmentRef.attachment = 0;
 colorAttachmentRef.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
 VkSubpassDescription subpass{};
 subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS;
 subpass.colorAttachmentCount = 1;
 subpass.pColorAttachments = &colorAttachmentRef;
 VkSubpassDependency dependency{};
 dependency.srcSubpass = VK_SUBPASS_EXTERNAL;
 dependency.dstSubpass = 0;
 dependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
 dependency.srcAccessMask = 0;
 dependency.dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
 dependency.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
 VkRenderPassCreateInfo renderPassInfo{};
 renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
 renderPassInfo.attachmentCount = 1;
 renderPassInfo.pAttachments = &colorAttachment;
 renderPassInfo.subpassCount = 1;
 renderPassInfo.pSubpasses = &subpass;
 renderPassInfo.dependencyCount = 1;
 renderPassInfo.pDependencies = &dependency;
 if (vkCreateRenderPass(device, &renderPassInfo, nullptr, &renderPass) != VK_SUCCESS) {
  printf("%s\n\r", "failed to create render pass!");
  return false;
 }
 return true;
};

However when I run it renderPass results in an invalid pointer: 0xe000000000e

Up to this stage, each stage of the render pipeline, (i.e, instance/device/swapchain/imageview creation) has been valid. So what is going wrong with the renderPass?

CodePudding user response:

However when I run it renderPass results in an invalid pointer: 0xe000000000e

There are two types of handle returned by Vulkan functions:

  • dispatchable:

Dispatchable handle types are a pointer to an opaque type. This pointer may be used by layers as part of intercepting API commands, and thus each API command takes a dispatchable type as its first parameter.

  • non-distpatchable:

Non-dispatchable handle types are a 64-bit integer type whose meaning is implementation-dependent.

VkRenderPass is defined as a non-distpatchable handle. There's no reason to look at the value and consider it as anything other than a 64 bit value. Whether or not it's a valid memory pointer is completely irrelevant.

You say in the comments that the function returns VK_SUCCESS and the validation layers don't report anything wrong. So what is the problem? If you're still having a problem rendering, it's likely not the render pass object, but something else.

  • Related