8#include <QtQuick/QQuickWindow>
9#include <QtQuick/QQuickGraphicsDevice>
17 m_graphicsBinding.type = XR_TYPE_GRAPHICS_BINDING_D3D11_KHR;
18 m_graphicsRequirements.type = XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR;
23 for (
const auto &
extension : extensions) {
24 if (!strcmp(XR_KHR_D3D11_ENABLE_EXTENSION_NAME,
34 return XR_KHR_D3D11_ENABLE_EXTENSION_NAME;
40 return reinterpret_cast<const XrBaseInStructure*
>(&m_graphicsBinding);
46 PFN_xrGetD3D11GraphicsRequirementsKHR pfnGetD3D11GraphicsRequirementsKHR =
nullptr;
48 reinterpret_cast<PFN_xrVoidFunction*
>(&pfnGetD3D11GraphicsRequirementsKHR)),
51 if (!pfnGetD3D11GraphicsRequirementsKHR) {
52 qWarning(
"Could not resolve xrGetD3D11GraphicsRequirementsKHR; perhaps the OpenXR implementation does not support D3D11?");
65 m_graphicsBinding.device =
reinterpret_cast<ID3D11Device*
>(d3d11Rhi->dev);
73 constexpr DXGI_FORMAT supportedColorSwapchainFormats[] = {
74 DXGI_FORMAT_B8G8R8A8_UNORM_SRGB,
75 DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
76 DXGI_FORMAT_B8G8R8A8_UNORM,
77 DXGI_FORMAT_R8G8B8A8_UNORM
80 auto swapchainFormatIt = std::find_first_of(std::begin(supportedColorSwapchainFormats),
81 std::end(supportedColorSwapchainFormats),
82 swapchainFormats.begin(),
83 swapchainFormats.end());
85 return *swapchainFormatIt;
91 constexpr int64_t supportedDepthSwapchainFormats[] = {
92 DXGI_FORMAT_D32_FLOAT_S8X24_UINT,
93 DXGI_FORMAT_D32_FLOAT,
97 return *std::find_first_of(std::begin(supportedDepthSwapchainFormats),
98 std::end(supportedDepthSwapchainFormats),
99 swapchainFormats.begin(),
100 swapchainFormats.end());
105 QVector<XrSwapchainImageBaseHeader*> swapchainImages;
106 QVector<XrSwapchainImageD3D11KHR> swapchainImageBuffer(
count);
107 for (XrSwapchainImageD3D11KHR&
image : swapchainImageBuffer) {
108 image.type = XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR;
109 swapchainImages.push_back(
reinterpret_cast<XrSwapchainImageBaseHeader*
>(&
image));
111 m_swapchainImageBuffer.insert(swapchain, swapchainImageBuffer);
112 return swapchainImages;
117 const XrSwapchainImageBaseHeader *swapchainImage,
121 const XrSwapchainImageBaseHeader *depthSwapchainImage,
122 quint64 depthSwapchainFormat)
const
124 ID3D11Texture2D*
const colorTexture =
reinterpret_cast<const XrSwapchainImageD3D11KHR*
>(swapchainImage)->
texture;
129 DXGI_FORMAT viewFormat = DXGI_FORMAT(swapchainFormat);
130 switch (swapchainFormat) {
131 case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
132 viewFormat = DXGI_FORMAT_R8G8B8A8_UNORM;
134 case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
135 viewFormat = DXGI_FORMAT_B8G8R8A8_UNORM;
142 qWarning(
"Qt Quick 3D XR: The D3D11 integration has no support for multiview");
144 QQuickRenderTarget::Flags
flags;
148 return QQuickRenderTarget::fromD3D11Texture(colorTexture,
150 QSize(subImage.imageRect.extent.width, subImage.imageRect.extent.height),
163 quickWindow->setGraphicsDevice(QQuickGraphicsDevice::fromAdapter(m_graphicsRequirements.adapterLuid.LowPart,
164 m_graphicsRequirements.adapterLuid.HighPart,
165 m_graphicsRequirements.minFeatureLevel));
bool finializeGraphics(QRhi *rhi) override
const char * extensionName() const override
QQuickRenderTarget renderTarget(const XrSwapchainSubImage &subImage, const XrSwapchainImageBaseHeader *swapchainImage, quint64 swapchainFormat, int samples, int arraySize, const XrSwapchainImageBaseHeader *depthSwapchainImage, quint64 depthSwapchainFormat) const override
const XrBaseInStructure * handle() const override
bool isExtensionSupported(const QVector< XrExtensionProperties > &extensions) const override
void setupWindow(QQuickWindow *quickWindow) override
bool setupGraphics(const XrInstance &instance, XrSystemId &systemId, const QQuickGraphicsConfiguration &quickConfig) override
QVector< XrSwapchainImageBaseHeader * > allocateSwapchainImages(int count, XrSwapchain swapchain) override
int64_t depthSwapchainFormat(const QVector< int64_t > &swapchainFormats) const override
int64_t colorSwapchainFormat(const QVector< int64_t > &swapchainFormats) const override
QQuickGraphicsConfiguration controls lower level graphics settings for the QQuickWindow.
The QQuickRenderTarget class provides an opaque container for native graphics resources specifying a ...
\qmltype Window \instantiates QQuickWindow \inqmlmodule QtQuick
\variable QRhiD3D11InitParams::enableDebugLayer
\inmodule QtGuiPrivate \inheaderfile rhi/qrhi.h
const QRhiNativeHandles * nativeHandles()
bool checkXrResult(XrResult result, XrInstance instance)
Combined button and popup list for selecting options.
GLenum GLenum GLsizei count
unsigned long long quint64