The open source OpenXR runtime
0
fork

Configure Feed

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

st/oxr: Refactor swapchain functions a bit

+83 -63
+83 -63
src/xrt/state_trackers/oxr/oxr_swapchain.c
··· 1 - // Copyright 2018-2022, Collabora, Ltd. 1 + // Copyright 2018-2023, Collabora, Ltd. 2 2 // SPDX-License-Identifier: BSL-1.0 3 3 /*! 4 4 * @file ··· 12 12 #include "util/u_debug.h" 13 13 #include "util/u_misc.h" 14 14 15 - #include "oxr_xret.h" 16 15 #include "oxr_objects.h" 17 16 #include "oxr_logger.h" 18 17 #include "oxr_handle.h" 18 + #include "oxr_xret.h" 19 19 20 20 21 + /* 22 + * 23 + * Conversion functions. 24 + * 25 + */ 26 + 27 + static enum xrt_swapchain_create_flags 28 + convert_create_flags(XrSwapchainCreateFlags xr_flags) 29 + { 30 + enum xrt_swapchain_create_flags flags = 0; 31 + 32 + if ((xr_flags & XR_SWAPCHAIN_CREATE_PROTECTED_CONTENT_BIT) != 0) { 33 + flags |= XRT_SWAPCHAIN_CREATE_PROTECTED_CONTENT; 34 + } 35 + if ((xr_flags & XR_SWAPCHAIN_CREATE_STATIC_IMAGE_BIT) != 0) { 36 + flags |= XRT_SWAPCHAIN_CREATE_STATIC_IMAGE; 37 + } 38 + 39 + return flags; 40 + } 41 + 42 + static enum xrt_swapchain_usage_bits 43 + convert_usage_bits(XrSwapchainUsageFlags xr_usage) 44 + { 45 + enum xrt_swapchain_usage_bits usage = 0; 46 + 47 + if ((xr_usage & XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT) != 0) { 48 + usage |= XRT_SWAPCHAIN_USAGE_COLOR; 49 + } 50 + if ((xr_usage & XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) != 0) { 51 + usage |= XRT_SWAPCHAIN_USAGE_DEPTH_STENCIL; 52 + } 53 + if ((xr_usage & XR_SWAPCHAIN_USAGE_UNORDERED_ACCESS_BIT) != 0) { 54 + usage |= XRT_SWAPCHAIN_USAGE_UNORDERED_ACCESS; 55 + } 56 + if ((xr_usage & XR_SWAPCHAIN_USAGE_TRANSFER_SRC_BIT) != 0) { 57 + usage |= XRT_SWAPCHAIN_USAGE_TRANSFER_SRC; 58 + } 59 + if ((xr_usage & XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT) != 0) { 60 + usage |= XRT_SWAPCHAIN_USAGE_TRANSFER_DST; 61 + } 62 + if ((xr_usage & XR_SWAPCHAIN_USAGE_SAMPLED_BIT) != 0) { 63 + usage |= XRT_SWAPCHAIN_USAGE_SAMPLED; 64 + } 65 + if ((xr_usage & XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT) != 0) { 66 + usage |= XRT_SWAPCHAIN_USAGE_MUTABLE_FORMAT; 67 + } 68 + // aliased to XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND 69 + if ((xr_usage & XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR) != 0) { 70 + usage |= XRT_SWAPCHAIN_USAGE_INPUT_ATTACHMENT; 71 + } 72 + 73 + return usage; 74 + } 75 + 76 + 77 + /* 78 + * 79 + * Internal API functions. 80 + * 81 + */ 82 + 21 83 static XrResult 22 - oxr_swapchain_acquire_image(struct oxr_logger *log, 23 - struct oxr_swapchain *sc, 24 - const XrSwapchainImageAcquireInfo *acquireInfo, 25 - uint32_t *out_index) 84 + acquire_image(struct oxr_logger *log, 85 + struct oxr_swapchain *sc, 86 + const XrSwapchainImageAcquireInfo *acquireInfo, 87 + uint32_t *out_index) 26 88 { 27 89 uint32_t index; 28 90 if (sc->acquired.num >= sc->swapchain->image_count) { ··· 60 122 } 61 123 62 124 static XrResult 63 - oxr_swapchain_wait_image(struct oxr_logger *log, struct oxr_swapchain *sc, const XrSwapchainImageWaitInfo *waitInfo) 125 + wait_image(struct oxr_logger *log, struct oxr_swapchain *sc, const XrSwapchainImageWaitInfo *waitInfo) 64 126 { 65 127 if (sc->waited.yes) { 66 128 return oxr_error(log, XR_ERROR_CALL_ORDER_INVALID, "Swapchain has already been waited, call release"); ··· 87 149 } 88 150 89 151 static XrResult 90 - oxr_swapchain_release_image(struct oxr_logger *log, 91 - struct oxr_swapchain *sc, 92 - const XrSwapchainImageReleaseInfo *releaseInfo) 152 + release_image(struct oxr_logger *log, struct oxr_swapchain *sc, const XrSwapchainImageReleaseInfo *releaseInfo) 93 153 { 94 154 if (!sc->waited.yes) { 95 155 return oxr_error(log, XR_ERROR_CALL_ORDER_INVALID, "No swapchain images waited on"); ··· 114 174 } 115 175 116 176 static XrResult 117 - oxr_swapchain_destroy(struct oxr_logger *log, struct oxr_handle_base *hb) 177 + destroy_handle(struct oxr_logger *log, struct oxr_handle_base *hb) 118 178 { 119 179 struct oxr_swapchain *sc = (struct oxr_swapchain *)hb; 120 180 ··· 123 183 return ret; 124 184 } 125 185 126 - static enum xrt_swapchain_create_flags 127 - convert_create_flags(XrSwapchainCreateFlags xr_flags) 128 - { 129 - enum xrt_swapchain_create_flags flags = 0; 130 186 131 - if ((xr_flags & XR_SWAPCHAIN_CREATE_PROTECTED_CONTENT_BIT) != 0) { 132 - flags |= XRT_SWAPCHAIN_CREATE_PROTECTED_CONTENT; 133 - } 134 - if ((xr_flags & XR_SWAPCHAIN_CREATE_STATIC_IMAGE_BIT) != 0) { 135 - flags |= XRT_SWAPCHAIN_CREATE_STATIC_IMAGE; 136 - } 137 - 138 - return flags; 139 - } 140 - 141 - static enum xrt_swapchain_usage_bits 142 - convert_usage_bits(XrSwapchainUsageFlags xr_usage) 143 - { 144 - enum xrt_swapchain_usage_bits usage = 0; 145 - 146 - if ((xr_usage & XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT) != 0) { 147 - usage |= XRT_SWAPCHAIN_USAGE_COLOR; 148 - } 149 - if ((xr_usage & XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) != 0) { 150 - usage |= XRT_SWAPCHAIN_USAGE_DEPTH_STENCIL; 151 - } 152 - if ((xr_usage & XR_SWAPCHAIN_USAGE_UNORDERED_ACCESS_BIT) != 0) { 153 - usage |= XRT_SWAPCHAIN_USAGE_UNORDERED_ACCESS; 154 - } 155 - if ((xr_usage & XR_SWAPCHAIN_USAGE_TRANSFER_SRC_BIT) != 0) { 156 - usage |= XRT_SWAPCHAIN_USAGE_TRANSFER_SRC; 157 - } 158 - if ((xr_usage & XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT) != 0) { 159 - usage |= XRT_SWAPCHAIN_USAGE_TRANSFER_DST; 160 - } 161 - if ((xr_usage & XR_SWAPCHAIN_USAGE_SAMPLED_BIT) != 0) { 162 - usage |= XRT_SWAPCHAIN_USAGE_SAMPLED; 163 - } 164 - if ((xr_usage & XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT) != 0) { 165 - usage |= XRT_SWAPCHAIN_USAGE_MUTABLE_FORMAT; 166 - } 167 - // aliased to XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND 168 - if ((xr_usage & XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR) != 0) { 169 - usage |= XRT_SWAPCHAIN_USAGE_INPUT_ATTACHMENT; 170 - } 171 - 172 - return usage; 173 - } 187 + /* 188 + * 189 + * 'Exported' functions. 190 + * 191 + */ 174 192 175 193 XrResult 176 194 oxr_create_swapchain(struct oxr_logger *log, ··· 202 220 return oxr_error(log, XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED, 203 221 "Specified swapchain format is not supported"); 204 222 } 205 - OXR_CHECK_XRET(log, sess, xret, xrt_comp_create_swapchain); 223 + if (xret != XRT_SUCCESS) { 224 + return oxr_error(log, XR_ERROR_RUNTIME_FAILURE, "Failed to create swapchain"); 225 + } 206 226 assert(xsc != NULL); 207 227 208 228 struct oxr_swapchain *sc = NULL; 209 - OXR_ALLOCATE_HANDLE_OR_RETURN(log, sc, OXR_XR_DEBUG_SWAPCHAIN, oxr_swapchain_destroy, &sess->handle); 229 + OXR_ALLOCATE_HANDLE_OR_RETURN(log, sc, OXR_XR_DEBUG_SWAPCHAIN, destroy_handle, &sess->handle); 210 230 sc->sess = sess; 211 231 sc->swapchain = xsc; 212 232 sc->width = createInfo->width; 213 233 sc->height = createInfo->height; 214 234 sc->array_layer_count = createInfo->arraySize; 215 235 sc->face_count = createInfo->faceCount; 216 - sc->acquire_image = oxr_swapchain_acquire_image; 217 - sc->wait_image = oxr_swapchain_wait_image; 218 - sc->release_image = oxr_swapchain_release_image; 236 + sc->acquire_image = acquire_image; 237 + sc->wait_image = wait_image; 238 + sc->release_image = release_image; 219 239 sc->is_static = (createInfo->createFlags & XR_SWAPCHAIN_CREATE_STATIC_IMAGE_BIT) != 0; 220 240 221 241 *out_swapchain = sc;