The open source OpenXR runtime
0
fork

Configure Feed

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

c/main: Let main compositor decide size of scratch image

+18 -38
+1 -1
src/xrt/compositor/main/comp_compositor.c
··· 1006 1006 { 1007 1007 COMP_TRACE_MARKER(); 1008 1008 1009 - c->r = comp_renderer_create(c); 1009 + c->r = comp_renderer_create(c, c->view_extents); 1010 1010 1011 1011 #ifdef XRT_FEATURE_WINDOW_PEEK 1012 1012 c->peek = comp_window_peek_create(c);
+10 -35
src/xrt/compositor/main/comp_renderer.c
··· 466 466 comp_layer_renderer_destroy(&r->lr); 467 467 } 468 468 469 - VkExtent2D extent; 470 - 471 - extent = (VkExtent2D){ 472 - .width = r->c->view_extents.width, 473 - .height = r->c->view_extents.height, 474 - }; 475 - 469 + VkExtent2D extent = r->scratch.extent; 476 470 r->lr = comp_layer_renderer_create(vk, &r->c->shaders, extent, VK_FORMAT_B8G8R8A8_SRGB); 477 471 if (layer_count != 0) { 478 472 comp_layer_renderer_allocate_layers(r->lr, layer_count); ··· 562 556 563 557 //! Create renderer and initialize non-image-dependent members 564 558 static void 565 - renderer_init(struct comp_renderer *r, struct comp_compositor *c) 559 + renderer_init(struct comp_renderer *r, struct comp_compositor *c, VkExtent2D scratch_extent) 566 560 { 567 561 r->c = c; 568 562 r->settings = &c->settings; ··· 570 564 r->acquired_buffer = -1; 571 565 r->fenced_buffer = -1; 572 566 r->rtr_array = NULL; 567 + 568 + bool bret = render_scratch_images_ensure(&c->nr, &r->scratch, scratch_extent); 569 + if (!bret) { 570 + COMP_ERROR(c, "render_scratch_images_ensure: false"); 571 + assert(false && "Whelp, can't return an error. But should never really fail."); 572 + } 573 573 574 574 // Try to early-allocate these, in case we can. 575 575 renderer_ensure_images_and_renderings(r, false); ··· 1030 1030 } 1031 1031 } 1032 1032 1033 - static void 1034 - ensure_scratch_image(struct comp_renderer *r) 1035 - { 1036 - struct xrt_view *l_v = &r->c->xdev->hmd->views[0]; 1037 - struct xrt_view *r_v = &r->c->xdev->hmd->views[1]; 1038 - 1039 - uint32_t w = MAX(l_v->viewport.w_pixels, r_v->viewport.w_pixels); 1040 - uint32_t h = MAX(l_v->viewport.h_pixels, r_v->viewport.h_pixels); 1041 - 1042 - // Adjust size to be bigger, 140%, to match default recommended viewport size. 1043 - //! @todo Make this match fully, or even match app provided layers. 1044 - w = (uint32_t)(w * 1.4f); 1045 - h = (uint32_t)(h * 1.4f); 1046 - 1047 - VkExtent2D extent = {w, h}; 1048 - 1049 - if (!render_scratch_images_ensure(&r->c->nr, &r->scratch, extent)) { 1050 - U_LOG_E("Failed to create scratch image!"); 1051 - assert(false); 1052 - } 1053 - } 1054 - 1055 1033 /*! 1056 1034 * @pre render_compute_init(crc, &c->nr) 1057 1035 */ ··· 1062 1040 1063 1041 struct comp_compositor *c = r->c; 1064 1042 struct comp_target *ct = c->target; 1065 - 1066 - // In case the scratch images are needed, make sure they are created. 1067 - ensure_scratch_image(r); 1068 1043 1069 1044 // Basics 1070 1045 const struct comp_layer *layers = c->base.slot.layers; ··· 1576 1551 } 1577 1552 1578 1553 struct comp_renderer * 1579 - comp_renderer_create(struct comp_compositor *c) 1554 + comp_renderer_create(struct comp_compositor *c, VkExtent2D scratch_extent) 1580 1555 { 1581 1556 struct comp_renderer *r = U_TYPED_CALLOC(struct comp_renderer); 1582 1557 1583 - renderer_init(r, c); 1558 + renderer_init(r, c, scratch_extent); 1584 1559 1585 1560 return r; 1586 1561 }
+7 -2
src/xrt/compositor/main/comp_renderer.h
··· 1 - // Copyright 2019-2021, Collabora, Ltd. 1 + // Copyright 2019-2023, Collabora, Ltd. 2 2 // SPDX-License-Identifier: BSL-1.0 3 3 /*! 4 4 * @file ··· 12 12 13 13 #include "xrt/xrt_compiler.h" 14 14 #include "xrt/xrt_defines.h" 15 + #include "xrt/xrt_vulkan_includes.h" 16 + 15 17 16 18 #ifdef __cplusplus 17 19 extern "C" { ··· 28 30 /*! 29 31 * Called by the main compositor code to create the renderer. 30 32 * 33 + * @param c Owning compositor. 34 + * @param scratch_extent Size for scratch image used when squashing layers. 35 + * 31 36 * @public @memberof comp_renderer 32 37 * @see comp_compositor 33 38 * @ingroup comp_main 34 39 */ 35 40 struct comp_renderer * 36 - comp_renderer_create(struct comp_compositor *c); 41 + comp_renderer_create(struct comp_compositor *c, VkExtent2D scratch_extent); 37 42 38 43 /*! 39 44 * Clean up and free the renderer.