monado/src/xrt/state_trackers/oxr/oxr_two_call.h
Drew DeVault a736812f63 oxr: mostly implement XR_SESSION_LOSS_PENDING
This is missing support for xrPollEvents, which needs to be handled
separately as it's not properly rigged up throughout Monado yet.
2019-10-10 22:51:21 +00:00

45 lines
1.7 KiB
C

// Copyright 2018-2019, Collabora, Ltd.
// SPDX-License-Identifier: BSL-1.0
/*!
* @file
* @brief Two call helper functions.
* @author Ryan Pavlik <ryan.pavlik@collabora.com>
* @author Jakob Bornecrantz <jakob@collabora.com>
* @ingroup oxr_main
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#define OXR_TWO_CALL_HELPER(log, cnt_input, cnt_output, output, count, data, \
sval) \
do { \
if (cnt_output == NULL) { \
return oxr_error(log, XR_ERROR_VALIDATION_FAILURE, \
#cnt_output); \
} \
*cnt_output = count; \
\
if (cnt_input == 0) { \
return sval; \
} \
if (cnt_input < count) { \
return oxr_error(log, XR_ERROR_SIZE_INSUFFICIENT, \
#cnt_input); \
} \
for (uint32_t i = 0; i < count; i++) { \
(output)[i] = (data)[i]; \
} \
return sval; \
} while (false)
#ifdef __cplusplus
}
#endif