OpenXRVkInstance.h 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #include <AzCore/std/containers/vector.h>
  10. #include <Atom/RHI/ValidationLayer.h>
  11. #include <OpenXRVk_Platform.h>
  12. #include <OpenXRVk/OpenXRVkFunctionLoader.h>
  13. #include <OpenXRVk/OpenXRVkPhysicalDevice.h>
  14. #include <XR/XRInstance.h>
  15. namespace OpenXRVk
  16. {
  17. //! Vulkan specific XR instance back-end class that will help manage
  18. //! XR specific vulkan native objects
  19. class Instance final
  20. : public XR::Instance
  21. {
  22. public:
  23. AZ_CLASS_ALLOCATOR(Instance, AZ::SystemAllocator, 0);
  24. AZ_RTTI(Instance, "{1A62DF32-2909-431C-A938-B1E841A50768}", XR::Instance);
  25. static XR::Ptr<Instance> Create();
  26. //////////////////////////////////////////////////////////////////////////
  27. // XR::Instance overrides
  28. AZ::RHI::ResultCode InitInstanceInternal(AZ::RHI::ValidationMode m_validationMode) override;
  29. AZ::RHI::ResultCode InitNativeInstance(AZ::RHI::XRInstanceDescriptor* instanceDescriptor) override;
  30. AZ::u32 GetNumPhysicalDevices() const override;
  31. AZ::RHI::ResultCode GetXRPhysicalDevice(AZ::RHI::XRPhysicalDeviceDescriptor* physicalDeviceDescriptor, int32_t index) override;
  32. //////////////////////////////////////////////////////////////////////////
  33. //! Enumerate supported extension names.
  34. XR::StringList GetInstanceExtensionNames(const char* layerName = nullptr) const;
  35. //! Enumerate supported layer names.
  36. XR::StringList GetInstanceLayerNames() const;
  37. //! Enumerate and log view configurations.
  38. void LogViewConfigurations();
  39. //! Enumerate and log environment blend mode.
  40. void LogEnvironmentBlendMode(XrViewConfigurationType type);
  41. //! Get the XRInstance.
  42. XrInstance GetXRInstance() const;
  43. //! Get System id.
  44. XrSystemId GetXRSystemId() const;
  45. //! Get native VkInstance.
  46. VkInstance GetNativeInstance() const;
  47. //! Get XR environment blend mode.
  48. XrEnvironmentBlendMode GetEnvironmentBlendMode() const;
  49. //! Get XR configuration type.
  50. XrViewConfigurationType GetViewConfigType() const;
  51. //! Ge the active VkPhysicalDevice.
  52. VkPhysicalDevice GetActivePhysicalDevice() const;
  53. private:
  54. //! Clean native objects.
  55. void ShutdownInternal() override;
  56. XrInstance m_xrInstance = XR_NULL_HANDLE;
  57. VkInstance m_xrVkInstance = VK_NULL_HANDLE;
  58. XrFormFactor m_formFactor = XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY;
  59. XrViewConfigurationType m_viewConfigType = XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO;
  60. XrEnvironmentBlendMode m_environmentBlendMode = XR_ENVIRONMENT_BLEND_MODE_OPAQUE;
  61. XrSystemId m_xrSystemId = XR_NULL_SYSTEM_ID;
  62. XR::RawStringList m_requiredLayers;
  63. XR::RawStringList m_requiredExtensions;
  64. AZStd::unique_ptr<FunctionLoader> m_functionLoader;
  65. AZStd::vector<VkPhysicalDevice> m_supportedXRDevices;
  66. AZ::u32 m_physicalDeviceActiveIndex = 0;
  67. };
  68. }