Commit: b8a7b87873a2941d46d29aa3867ac3e398f74862
Author: Julian Eisel
Date: Thu Jul 11 16:30:21 2019 +0200
Branches: soc-2019-openxr
https://developer.blender.org/rBb8a7b87873a2941d46d29aa3867ac3e398f74862
General minor fixes and cleanup
* Initialize all class member variables
* Add version to runtime name printing
* Separate functionality code from debug prints
* Improve code structure using Doxygen groups
* Make accessors const functions
* Add (Doxygen) comments
* Naming
* Reorder functions
===================================================================
M intern/ghost/intern/GHOST_XrContext.cpp
M intern/ghost/intern/GHOST_XrContext.h
M intern/ghost/intern/GHOST_XrSession.cpp
M intern/ghost/intern/GHOST_XrSession.h
M intern/ghost/intern/GHOST_Xr_intern.h
===================================================================
diff --git a/intern/ghost/intern/GHOST_XrContext.cpp
b/intern/ghost/intern/GHOST_XrContext.cpp
index bf08adcd25d..e4502ae1e99 100644
--- a/intern/ghost/intern/GHOST_XrContext.cpp
+++ b/intern/ghost/intern/GHOST_XrContext.cpp
@@ -38,7 +38,7 @@ struct OpenXRInstanceData {
static PFN_xrCreateDebugUtilsMessengerEXT
s_xrCreateDebugUtilsMessengerEXT_fn;
static PFN_xrDestroyDebugUtilsMessengerEXT
s_xrDestroyDebugUtilsMessengerEXT_fn;
- XrDebugUtilsMessengerEXT debug_messenger;
+ XrDebugUtilsMessengerEXT debug_messenger{XR_NULL_HANDLE};
};
PFN_xrCreateDebugUtilsMessengerEXT
OpenXRInstanceData::s_xrCreateDebugUtilsMessengerEXT_fn =
@@ -46,6 +46,11 @@ PFN_xrCreateDebugUtilsMessengerEXT
OpenXRInstanceData::s_xrCreateDebugUtilsMesse
PFN_xrDestroyDebugUtilsMessengerEXT
OpenXRInstanceData::s_xrDestroyDebugUtilsMessengerEXT_fn =
nullptr;
+/* -------------------------------------------------------------------- */
+/** \name Create, Initialize and Destruct
+ *
+ * \{ */
+
GHOST_XrContext::GHOST_XrContext(const GHOST_XrContextCreateInfo *create_info)
: m_oxr(new OpenXRInstanceData()), m_debug(create_info->context_flag &
GHOST_kXrContextDebug)
{
@@ -63,29 +68,25 @@ GHOST_XrContext::~GHOST_XrContext()
GHOST_TSuccess GHOST_XrContext::initialize(const GHOST_XrContextCreateInfo
*create_info)
{
- XR_DEBUG_PRINTF(this, "Available OpenXR API-layers/extensions:\n");
if (!enumerateApiLayers() || !enumerateExtensions()) {
return GHOST_kFailure;
}
- XR_DEBUG_PRINTF(this, "Done printing OpenXR API-layers/extensions.\n");
+ XR_DEBUG_ONLY_CALL(this, printAvailableAPILayersAndExtensionsInfo());
m_gpu_binding_type = determineGraphicsBindingTypeToEnable(create_info);
assert(m_oxr->instance == XR_NULL_HANDLE);
createOpenXRInstance();
printInstanceInfo();
- XR_DEBUG_ONLY_BEGIN(this);
- initDebugMessenger();
- XR_DEBUG_ONLY_END;
+ XR_DEBUG_ONLY_CALL(this, initDebugMessenger());
return GHOST_kSuccess;
}
void GHOST_XrContext::createOpenXRInstance()
{
- XrInstanceCreateInfo create_info{};
+ XrInstanceCreateInfo create_info{XR_TYPE_INSTANCE_CREATE_INFO};
- create_info.type = XR_TYPE_INSTANCE_CREATE_INFO;
std::string("Blender").copy(create_info.applicationInfo.applicationName,
XR_MAX_APPLICATION_NAME_SIZE);
create_info.applicationInfo.apiVersion = XR_CURRENT_API_VERSION;
@@ -96,28 +97,108 @@ void GHOST_XrContext::createOpenXRInstance()
create_info.enabledApiLayerNames = m_enabled_layers.data();
create_info.enabledExtensionCount = m_enabled_extensions.size();
create_info.enabledExtensionNames = m_enabled_extensions.data();
+ XR_DEBUG_ONLY_CALL(this, printExtensionsAndAPILayersToEnable());
xrCreateInstance(&create_info, &m_oxr->instance);
}
+/** \} */ /* Create, Initialize and Destruct */
+
+/* -------------------------------------------------------------------- */
+/** \name Debug Printing
+ *
+ * \{ */
+
void GHOST_XrContext::printInstanceInfo()
{
assert(m_oxr->instance != XR_NULL_HANDLE);
- XrInstanceProperties instanceProperties{};
- instanceProperties.type = XR_TYPE_INSTANCE_PROPERTIES;
- xrGetInstanceProperties(m_oxr->instance, &instanceProperties);
+ XrInstanceProperties instance_properties{XR_TYPE_INSTANCE_PROPERTIES};
+ xrGetInstanceProperties(m_oxr->instance, &instance_properties);
+
+ printf("Connected to OpenXR runtime: %s (Version %i.%i.%i)\n",
+ instance_properties.runtimeName,
+ XR_VERSION_MAJOR(instance_properties.runtimeVersion),
+ XR_VERSION_MINOR(instance_properties.runtimeVersion),
+ XR_VERSION_PATCH(instance_properties.runtimeVersion));
+}
+
+void GHOST_XrContext::printAvailableAPILayersAndExtensionsInfo()
+{
+ puts("Available OpenXR API-layers/extensions:");
+ for (XrApiLayerProperties &layer_info : m_oxr->layers) {
+ printf("Layer: %s\n", layer_info.layerName);
+ }
+ for (XrExtensionProperties &ext_info : m_oxr->extensions) {
+ printf("Extension: %s\n", ext_info.extensionName);
+ }
+}
+
+void GHOST_XrContext::printExtensionsAndAPILayersToEnable()
+{
+ for (const char *layer_name : m_enabled_layers) {
+ printf("Enabling OpenXR API-Layer: %s\n", layer_name);
+ }
+ for (const char *ext_name : m_enabled_extensions) {
+ printf("Enabling OpenXR Extension: %s\n", ext_name);
+ }
+}
+
+static XrBool32 debug_messenger_func(XrDebugUtilsMessageSeverityFlagsEXT
/*messageSeverity*/,
+ XrDebugUtilsMessageTypeFlagsEXT
/*messageTypes*/,
+ const
XrDebugUtilsMessengerCallbackDataEXT *callbackData,
+ void * /*userData*/)
+{
+ puts("OpenXR Debug Message:");
+ puts(callbackData->message);
+ return XR_FALSE; // OpenXR spec suggests always returning false.
+}
+
+void GHOST_XrContext::initDebugMessenger()
+{
+ XrDebugUtilsMessengerCreateInfoEXT
create_info{XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT};
+
+ /* Extension functions need to be obtained through xrGetInstanceProcAddr */
+ if (XR_FAILED(xrGetInstanceProcAddr(
+ m_oxr->instance,
+ "xrCreateDebugUtilsMessengerEXT",
+ (PFN_xrVoidFunction *)&m_oxr->s_xrCreateDebugUtilsMessengerEXT_fn))
||
+ XR_FAILED(xrGetInstanceProcAddr(
+ m_oxr->instance,
+ "xrDestroyDebugUtilsMessengerEXT",
+ (PFN_xrVoidFunction
*)&m_oxr->s_xrDestroyDebugUtilsMessengerEXT_fn))) {
+ fprintf(stderr, "Could not use XR_EXT_debug_utils to enable debug
prints.\n");
+ m_oxr->s_xrCreateDebugUtilsMessengerEXT_fn = nullptr;
+ m_oxr->s_xrDestroyDebugUtilsMessengerEXT_fn = nullptr;
+ return;
+ }
+
+ create_info.messageSeverities =
XR_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT |
+ XR_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT
|
+
XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT |
+
XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
+ create_info.messageTypes = XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |
+ XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT |
+ XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
+ create_info.userCallback = debug_messenger_func;
- XR_DEBUG_PRINTF(this, "Connected to OpenXR runtime: %s\n",
instanceProperties.runtimeName);
+ m_oxr->s_xrCreateDebugUtilsMessengerEXT_fn(
+ m_oxr->instance, &create_info, &m_oxr->debug_messenger);
}
+/** \} */ /* Debug Printing */
+
+/* -------------------------------------------------------------------- */
+/** \name OpenXR API-Layers and Extensions
+ *
+ * \{ */
+
/**
* \param layer_name May be NULL for extensions not belonging to a specific
layer.
*/
GHOST_TSuccess GHOST_XrContext::enumerateExtensionsEx(
std::vector<XrExtensionProperties> &extensions, const char *layer_name)
{
- const unsigned long old_extension_count = extensions.size();
uint32_t extension_count = 0;
/* Get count for array creation/init first. */
@@ -136,18 +217,9 @@ GHOST_TSuccess GHOST_XrContext::enumerateExtensionsEx(
extensions.push_back(ext);
}
- if (layer_name) {
- XR_DEBUG_PRINTF(this, "Layer: %s\n", layer_name);
- }
-
/* Actually get the extensions. */
xrEnumerateInstanceExtensionProperties(
layer_name, extension_count, &extension_count, extensions.data());
- XR_DEBUG_ONLY_BEGIN(this);
- for (uint32_t i = 0; i < extension_count; i++) {
- XR_DEBUG_PRINTF(this, "Extension: %s\n", extensions[i +
old_extension_count].extensionName);
- }
- XR_DEBUG_ONLY_END;
return GHOST_kSuccess;
}
@@ -178,8 +250,6 @@ GHOST_TSuccess GHOST_XrContext::enumerateApiLayers()
/* Actually get the layers. */
xrEnumerateApiLayerProperties(layer_count, &layer_count,
m_oxr->layers.data());
for (XrApiLayerProperties &layer : m_oxr->layers) {
- XR_DEBUG_PRINTF(this, "Layer: %s\n", layer.layerName);
-
/* Each layer may have own extensions */
enumerateExtensionsEx(m_oxr->extensions, layer.layerName);
}
@@ -217,16 +287,13 @@ void
GHOST_XrContext::getAPILayersToEnable(std::vector<const char *> &r_ext_name
{
static std::vector<std::string> try_layers;
- XR_DEBUG_ONLY_BEGIN(this);
- try_layers.push_back("XR_APILAYER_LUNARG_core_validation");
- XR_DEBUG_ONLY_END;
+ XR_DEBUG_ONLY_CALL(this,
try_layers.push_back("XR_APILAYER_LUNARG_core_validation"));
r_ext_names.reserve(try_layers.size());
for (const std::string &layer : try_layers) {
if (openxr_layer_is_available(m_oxr->layers, layer)) {
r_ext_names.push_back(layer.c_str());
- XR_DEBUG_PRINTF(this, "Enabling OpenXR API-Layer %s\n", layer.c_str());
}
}
}
@@ -257,26 +324,20 @@ void
GHOST_XrContext::getExtensionsToEnable(std::vector<const char *> &r_ext_nam
const char *gpu_binding =
openxr_ext_name_from_wm_gpu_binding(m_gpu_binding_type);
static std::vector<std::string> try_ext;
- const auto add_ext = [this, &r_ext_names](const char *ext_name) {
- r_ext_names.push_back(ext_name);
- XR_DEBUG_PRINTF(this, "Enabling OpenXR Extension: %s\n", ext_name);
- };
- XR_DEBUG_ONLY_BEGIN(this);
/* Try enabling debug extension */
- try_ext.push_back(XR_EXT_DEBUG_UTILS_EXTENSION_NAME);
- XR_DEBUG_ONLY_END;
+ XR_DEBUG_ONLY_CALL(this,
try_ext.push_back(XR_EXT_DEBUG_UTILS_EXTENSION_NAME));
r_ext_names.reserve(try_ext.size() + 1); /* + 1 for graphics binding
extension. */
/* Add graphics binding extension. */
assert(gpu_binding);
assert(openxr_extension_is_available(m_oxr->extensions, gpu_binding));
- add_ext(gpu_binding);
+ r_ext_names.push_back(gpu_binding);
for (const std::string &ext : try_ext) {
if (openxr_extension_is_available(m_oxr->extensions, ext)) {
- add_ext(ext.c_str());
+ r_ext_names.push_back(ext.c_str());
}
}
}
@@ -303,47 +364,13 @@ GHOST_TXrGraphicsBinding
GHOST_XrContext::determineGraphicsBindingTypeToEnable(
return GHOST_kXrGraphicsUnknown;
}
-static XrBool32 debug_messenger_func(XrDebugUtilsMessageSeverityFlagsEXT
/*messageSeverity*/,
- XrDebugUtilsMessageTypeFlagsEXT
/*messageTypes*/,
- const XrDebugUtilsMessenger
@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs