The open source OpenXR runtime
0
fork

Configure Feed

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

c/main: Use render's render pass in layer renderer

+38 -72
+27 -67
src/xrt/compositor/main/comp_layer_renderer.c
··· 31 31 }; 32 32 33 33 34 - 35 - static bool 36 - _init_render_pass(struct vk_bundle *vk, 37 - VkFormat format, 38 - VkImageLayout final_layout, 39 - VkSampleCountFlagBits sample_count, 40 - VkRenderPass *out_render_pass) 41 - { 42 - VkAttachmentDescription *attachments = (VkAttachmentDescription[]){ 43 - { 44 - .format = format, 45 - .samples = sample_count, 46 - .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR, 47 - .storeOp = VK_ATTACHMENT_STORE_OP_STORE, 48 - .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE, 49 - .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE, 50 - .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED, 51 - .finalLayout = final_layout, 52 - .flags = 0, 53 - }, 54 - }; 55 - 56 - VkRenderPassCreateInfo renderpass_info = { 57 - .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, 58 - .flags = 0, 59 - .attachmentCount = 1, 60 - .pAttachments = attachments, 61 - .subpassCount = 1, 62 - .pSubpasses = 63 - &(VkSubpassDescription){ 64 - .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS, 65 - .colorAttachmentCount = 1, 66 - .pColorAttachments = 67 - &(VkAttachmentReference){ 68 - .attachment = 0, 69 - .layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, 70 - }, 71 - .pDepthStencilAttachment = NULL, 72 - .pResolveAttachments = NULL, 73 - }, 74 - .dependencyCount = 0, 75 - .pDependencies = NULL, 76 - }; 77 - 78 - VkResult res = vk->vkCreateRenderPass(vk->device, &renderpass_info, NULL, out_render_pass); 79 - vk_check_error("vkCreateRenderPass", res, false); 80 - 81 - return true; 82 - } 83 - 84 34 static bool 85 35 _init_descriptor_layout(struct comp_layer_renderer *self) 86 36 { ··· 287 237 .pMultisampleState = 288 238 &(VkPipelineMultisampleStateCreateInfo){ 289 239 .sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO, 290 - .rasterizationSamples = self->sample_count, 240 + .rasterizationSamples = self->rgrp->sample_count, 291 241 .minSampleShading = 0.0f, 292 242 .pSampleMask = &(uint32_t){0xFFFFFFFF}, 293 243 .alphaToCoverageEnable = VK_FALSE, ··· 303 253 }, 304 254 .stageCount = 2, 305 255 .pStages = shader_stages, 306 - .renderPass = self->render_pass, 256 + .renderPass = self->rgrp->render_pass, 307 257 .pDynamicState = 308 258 &(VkPipelineDynamicStateCreateInfo){ 309 259 .sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, ··· 474 424 475 425 static bool 476 426 _init(struct comp_layer_renderer *self, 427 + struct vk_bundle *vk, 477 428 struct render_shaders *s, 478 - struct vk_bundle *vk, 479 - VkExtent2D extent, 480 - VkFormat format) 429 + struct render_gfx_render_pass *rgrp, 430 + VkExtent2D extent) 481 431 { 482 432 self->vk = vk; 483 433 484 434 self->nearZ = 0.001f; 485 435 self->farZ = 100.0f; 486 - self->sample_count = VK_SAMPLE_COUNT_1_BIT; 487 436 488 437 self->layer_count = 0; 489 438 490 439 self->extent = extent; 440 + 441 + self->rgrp = rgrp; 491 442 492 443 // binding indices used in layer.vert, layer.frag 493 444 self->transformation_ubo_binding = 0; ··· 505 456 return false; 506 457 } 507 458 508 - if (!_init_render_pass(vk, format, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, self->sample_count, 509 - &self->render_pass)) 510 - return false; 511 459 512 - for (uint32_t i = 0; i < 2; i++) 513 - if (!_init_frame_buffer(self, format, self->render_pass, i)) 460 + for (uint32_t i = 0; i < 2; i++) { 461 + if (!_init_frame_buffer( // 462 + self, // 463 + self->rgrp->format, // 464 + self->rgrp->render_pass, // 465 + i)) { // 514 466 return false; 467 + } 468 + } 515 469 516 470 if (!_init_descriptor_layout(self)) 517 471 return false; ··· 552 506 } 553 507 554 508 struct comp_layer_renderer * 555 - comp_layer_renderer_create(struct vk_bundle *vk, struct render_shaders *s, VkExtent2D extent, VkFormat format) 509 + comp_layer_renderer_create(struct vk_bundle *vk, 510 + struct render_shaders *s, 511 + struct render_gfx_render_pass *rgrp, 512 + VkExtent2D extent) 556 513 { 557 514 struct comp_layer_renderer *r = U_TYPED_CALLOC(struct comp_layer_renderer); 558 - _init(r, s, vk, extent, format); 515 + _init(r, vk, s, rgrp, extent); 559 516 return r; 560 517 } 561 518 ··· 618 575 vk->vkCmdSetScissor(cmd_buffer, 0, 1, &scissor); 619 576 620 577 for (uint32_t eye = 0; eye < 2; eye++) { 621 - _render_pass_begin(vk, self->render_pass, self->extent, *color, self->framebuffers[eye].handle, 622 - cmd_buffer); 578 + _render_pass_begin( // 579 + vk, // 580 + self->rgrp->render_pass, // 581 + self->extent, // 582 + *color, // 583 + self->framebuffers[eye].handle, // 584 + cmd_buffer); // 623 585 624 586 _render_eye(self, eye, cmd_buffer, self->pipeline_layout); 625 587 ··· 695 657 696 658 for (uint32_t i = 0; i < 2; i++) 697 659 _destroy_framebuffer(self, i); 698 - 699 - vk->vkDestroyRenderPass(vk->device, self->render_pass, NULL); 700 660 701 661 vk->vkDestroyPipelineLayout(vk->device, self->pipeline_layout, NULL); 702 662 vk->vkDestroyDescriptorSetLayout(vk->device, self->descriptor_set_layout, NULL);
+6 -4
src/xrt/compositor/main/comp_layer_renderer.h
··· 30 30 31 31 struct vk_cmd_pool pool; 32 32 33 - VkRenderPass render_pass; 33 + //! Render pass used to create all pipelines. 34 + struct render_gfx_render_pass *rgrp; 34 35 35 36 VkExtent2D extent; 36 - 37 - VkSampleCountFlagBits sample_count; 38 37 39 38 VkShaderModule shader_modules[2]; 40 39 VkPipeline pipeline_premultiplied_alpha; ··· 70 69 * @public @memberof comp_layer_renderer 71 70 */ 72 71 struct comp_layer_renderer * 73 - comp_layer_renderer_create(struct vk_bundle *vk, struct render_shaders *s, VkExtent2D extent, VkFormat format); 72 + comp_layer_renderer_create(struct vk_bundle *vk, 73 + struct render_shaders *s, 74 + struct render_gfx_render_pass *rgrp, 75 + VkExtent2D extent); 74 76 75 77 /*! 76 78 * Destroy the layer renderer and set the pointer to NULL.
+5 -1
src/xrt/compositor/main/comp_renderer.c
··· 474 474 } 475 475 476 476 VkExtent2D extent = r->scratch.extent; 477 - r->lr = comp_layer_renderer_create(vk, &r->c->shaders, extent, VK_FORMAT_R8G8B8A8_SRGB); 477 + r->lr = comp_layer_renderer_create( // 478 + vk, // 479 + &r->c->shaders, // 480 + &r->scratch_render_pass, // 481 + extent); // 478 482 if (layer_count != 0) { 479 483 comp_layer_renderer_allocate_layers(r->lr, layer_count); 480 484 }