The open source OpenXR runtime
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

c/render: Refactor external render pass into a implicit one

+20 -19
+20 -19
src/xrt/compositor/render/render_gfx.c
··· 58 58 } 59 59 60 60 static VkResult 61 - create_external_render_pass(struct vk_bundle *vk, VkFormat format, VkRenderPass *out_render_pass) 61 + create_implicit_render_pass(struct vk_bundle *vk, 62 + VkFormat format, 63 + VkAttachmentLoadOp load_op, 64 + VkImageLayout final_layout, 65 + VkRenderPass *out_render_pass) 62 66 { 63 67 VkResult ret; 64 68 ··· 66 70 { 67 71 .format = format, 68 72 .samples = VK_SAMPLE_COUNT_1_BIT, 69 - .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR, 73 + .loadOp = load_op, 70 74 .storeOp = VK_ATTACHMENT_STORE_OP_STORE, 71 75 .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE, 72 76 .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE, 73 77 .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED, 74 - .finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, 78 + .finalLayout = final_layout, 79 + .flags = 0, 75 80 }, 76 81 }; 77 82 ··· 94 99 }, 95 100 }; 96 101 97 - VkSubpassDependency dependencies[1] = { 98 - { 99 - .srcSubpass = VK_SUBPASS_EXTERNAL, 100 - .dstSubpass = 0, 101 - .srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 102 - .dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 103 - .srcAccessMask = 0, 104 - .dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, 105 - }, 106 - }; 102 + /* 103 + * We don't use any VkSubpassDependency structs, instead relying on the 104 + * implicit dependencies inserted by the runtime implementation. 105 + */ 107 106 108 107 VkRenderPassCreateInfo render_pass_info = { 109 108 .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, ··· 111 110 .pAttachments = attachments, 112 111 .subpassCount = ARRAY_SIZE(subpasses), 113 112 .pSubpasses = subpasses, 114 - .dependencyCount = ARRAY_SIZE(dependencies), 115 - .pDependencies = dependencies, 113 + .dependencyCount = 0, 114 + .pDependencies = NULL, 116 115 }; 117 116 118 117 VkRenderPass render_pass = VK_NULL_HANDLE; ··· 442 441 443 442 rtr->data = *data; 444 443 445 - C(create_external_render_pass( // 446 - vk, // vk_bundle 447 - data->format, // target_format 448 - &rtr->render_pass)); // out_render_pass 444 + C(create_implicit_render_pass( // 445 + vk, // vk_bundle 446 + data->format, // target_format 447 + VK_ATTACHMENT_LOAD_OP_CLEAR, // load_op 448 + VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, // final_layout 449 + &rtr->render_pass)); // out_render_pass 449 450 450 451 C(create_mesh_pipeline(vk, // vk_bundle 451 452 rtr->render_pass, // render_pass