The open source OpenXR runtime

c/util: Use a include for layer defines

Part-of: <https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2619>

authored by

Jakob Bornecrantz and committed by
Marge Bot
c5ed968e b1415957

+56 -18
+8 -15
src/xrt/compositor/shaders/layer.comp
··· 1 1 // Copyright 2021-2023, Collabora Ltd. 2 + // Copyright 2025, NVIDIA CORPORATION. 2 3 // Author: Jakob Bornecrantz <jakob@collabora.com> 3 4 // Author: Christoph Haag <christoph.haag@collabora.com> 4 5 // SPDX-License-Identifier: BSL-1.0 ··· 7 8 #extension GL_GOOGLE_include_directive : require 8 9 9 10 #include "srgb.inc.glsl" 11 + #include "layer_defines.inc.glsl" 10 12 11 - //! @todo should this be a spcialization const? 12 - #define XRT_LAYER_PROJECTION 0 13 - #define XRT_LAYER_PROJECTION_DEPTH 1 14 - #define XRT_LAYER_QUAD 2 15 - #define XRT_LAYER_CUBE 3 16 - #define XRT_LAYER_CYLINDER 4 17 - #define XRT_LAYER_EQUIRECT1 5 18 - #define XRT_LAYER_EQUIRECT2 6 19 13 20 14 const float PI = acos(-1); 21 15 ··· 460 454 vec4 rgba = vec4(0, 0, 0, 0); 461 455 462 456 switch (ubo.layer_type_and_unpremultiplied[layer].x) { 463 - case XRT_LAYER_CYLINDER: 457 + case LAYER_COMP_TYPE_QUAD: 458 + rgba = do_quad(view_uv, layer); 459 + break; 460 + case LAYER_COMP_TYPE_CYLINDER: 464 461 rgba = do_cylinder(view_uv, layer); 465 462 break; 466 - case XRT_LAYER_EQUIRECT2: 463 + case LAYER_COMP_TYPE_EQUIRECT2: 467 464 rgba = do_equirect2(view_uv, layer); 468 465 break; 469 - case XRT_LAYER_PROJECTION: 470 - case XRT_LAYER_PROJECTION_DEPTH: 466 + case LAYER_COMP_TYPE_PROJECTION: 471 467 rgba = do_projection(view_uv, layer); 472 - break; 473 - case XRT_LAYER_QUAD: 474 - rgba = do_quad(view_uv, layer); 475 468 break; 476 469 default: break; 477 470 }
+22
src/xrt/compositor/shaders/layer_defines.inc.glsl
··· 1 + // Copyright 2025, NVIDIA CORPORATION. 2 + // SPDX-License-Identifier: BSL-1.0 3 + 4 + /* 5 + * This file is included by both C code, like comp_render_cs.c, and GLSL code, 6 + * like layer.comp, so it uses a very limited set of features of both. 7 + */ 8 + #ifndef LAYER_DEFINES_INC_GLSL 9 + #define LAYER_DEFINES_INC_GLSL 10 + 11 + //! To handle invalid/unsupported layer types. 12 + #define LAYER_COMP_TYPE_NOOP 0 13 + //! Maps to XRT_LAYER_QUAD (not numerically) 14 + #define LAYER_COMP_TYPE_QUAD 1 15 + //! Maps to XRT_LAYER_CYLINDER (not numerically) 16 + #define LAYER_COMP_TYPE_CYLINDER 2 17 + //! Maps to XRT_LAYER_EQUIRECT2 (not numerically) 18 + #define LAYER_COMP_TYPE_EQUIRECT2 3 19 + //! Maps to XRT_LAYER_PROJECTION[_DEPTH] (not numerically) 20 + #define LAYER_COMP_TYPE_PROJECTION 4 21 + 22 + #endif // LAYER_DEFINES_INC_GLSL
+26 -3
src/xrt/compositor/util/comp_render_cs.c
··· 26 26 27 27 #include "render/render_interface.h" 28 28 29 + #include "shaders/layer_defines.inc.glsl" 30 + 29 31 #include "util/comp_render.h" 30 32 #include "util/comp_render_helpers.h" 31 33 #include "util/comp_base.h" ··· 33 35 34 36 /* 35 37 * 36 - * Compute layer data builders. 38 + * Helpers 37 39 * 38 40 */ 39 41 ··· 53 55 (struct comp_swapchain *)(comp_layer_get_depth_swapchain(layer, swapchain_index)); 54 56 return &sc->images[image_index]; 55 57 } 58 + 59 + 60 + static inline uint32_t 61 + xrt_layer_to_cs_layer_type(const struct xrt_layer_data *data) 62 + { 63 + switch (data->type) { 64 + case XRT_LAYER_QUAD: return LAYER_COMP_TYPE_QUAD; 65 + case XRT_LAYER_CYLINDER: return LAYER_COMP_TYPE_CYLINDER; 66 + case XRT_LAYER_EQUIRECT2: return LAYER_COMP_TYPE_EQUIRECT2; 67 + case XRT_LAYER_PROJECTION: 68 + case XRT_LAYER_PROJECTION_DEPTH: return LAYER_COMP_TYPE_PROJECTION; 69 + default: U_LOG_E("Invalid layer type! %u", data->type); return LAYER_COMP_TYPE_NOOP; 70 + } 71 + } 72 + 73 + 74 + /* 75 + * 76 + * Compute layer data builders. 77 + * 78 + */ 56 79 57 80 /// Data setup for a cylinder layer 58 81 static inline void ··· 660 683 continue; 661 684 } 662 685 663 - ubo_data->layer_type[cur_layer].val = data->type; 686 + ubo_data->layer_type[cur_layer].val = xrt_layer_to_cs_layer_type(data); 664 687 ubo_data->layer_type[cur_layer].unpremultiplied = is_layer_unpremultiplied(data); 665 688 666 689 // Finally okay to increment the current layer. ··· 671 694 ubo_data->layer_count.value = cur_layer; 672 695 673 696 for (uint32_t i = cur_layer; i < RENDER_MAX_LAYERS; i++) { 674 - ubo_data->layer_type[i].val = UINT32_MAX; 697 + ubo_data->layer_type[i].val = LAYER_COMP_TYPE_NOOP; // Explicit no-op. 675 698 } 676 699 677 700 //! @todo: If Vulkan 1.2, use VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT and skip this