The open source OpenXR runtime
0
fork

Configure Feed

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

util: Add a index fifo

+78
+2
doc/changes/auxiliary/mr.359.1.md
··· 1 + util: Add a very simple fifo for indices, this is used to keep track of 2 + swapchain in order of age (oldness).
+76
src/xrt/auxiliary/util/u_index_fifo.h
··· 1 + // Copyright 2020, Collabora, Ltd. 2 + // SPDX-License-Identifier: BSL-1.0 3 + /*! 4 + * @file 5 + * @brief A FIFO for indices. 6 + * @author Jakob Bornecrantz <jakob@collabora.com> 7 + * @ingroup aux_util 8 + */ 9 + 10 + #pragma once 11 + 12 + 13 + #define U_MAX_FIFO_INDICES 16 14 + 15 + struct u_index_fifo 16 + { 17 + uint32_t indices[U_MAX_FIFO_INDICES]; 18 + size_t start; 19 + size_t end; 20 + }; 21 + 22 + static inline int 23 + u_index_fifo_is_empty(struct u_index_fifo *uif) 24 + { 25 + if (uif->start == uif->end) { 26 + return 1; 27 + } else { 28 + return 0; 29 + } 30 + } 31 + 32 + static inline int 33 + u_index_fifo_is_full(struct u_index_fifo *uif) 34 + { 35 + if (((uif->end + 1) % U_MAX_FIFO_INDICES) == uif->start) { 36 + return 1; 37 + } else { 38 + return 0; 39 + } 40 + } 41 + 42 + static inline int 43 + u_index_fifo_peek(struct u_index_fifo *uif, uint32_t *out_index) 44 + { 45 + if (u_index_fifo_is_empty(uif)) { 46 + return -1; 47 + } 48 + 49 + *out_index = uif->indices[uif->start]; 50 + return 0; 51 + } 52 + 53 + static inline int 54 + u_index_fifo_pop(struct u_index_fifo *uif, uint32_t *out_index) 55 + { 56 + if (u_index_fifo_is_empty(uif)) { 57 + return -1; 58 + } 59 + 60 + *out_index = uif->indices[uif->start]; 61 + uif->start = (uif->start + 1) % U_MAX_FIFO_INDICES; 62 + return 0; 63 + } 64 + 65 + static inline int 66 + u_index_fifo_push(struct u_index_fifo *uif, uint32_t index) 67 + { 68 + if (u_index_fifo_is_full(uif)) { 69 + return -1; 70 + } 71 + 72 + uif->indices[uif->end] = index; 73 + uif->end = (uif->end + 1) % U_MAX_FIFO_INDICES; 74 + 75 + return 0; 76 + }