Libovr 1.43 Reference Guide

OVR_CAPI_D3D.h File Reference

D3D specific structures used by the CAPI interface.

Functions

ovrResult
ovr_CreateTextureSwapChainDX ( ovrSession session, IUnknown * d3dPtr, const ovrTextureSwapChainDesc * desc, ovrTextureSwapChain * out_TextureSwapChain )
Create Texture Swap Chain suitable for use with Direct3D 11 and 12.
ovrResult
ovr_GetTextureSwapChainBufferDX ( ovrSession session, ovrTextureSwapChain chain, int index, IID iid, void ** out_Buffer )
Get a specific buffer within the chain as any compatible COM interface (similar to QueryInterface)
ovrResult
ovr_CreateMirrorTextureWithOptionsDX ( ovrSession session, IUnknown * d3dPtr, const ovrMirrorTextureDesc * desc, ovrMirrorTexture * out_MirrorTexture )
Create Mirror Texture which is auto-refreshed to mirror Rift contents produced by this application.
ovrResult
ovr_CreateMirrorTextureDX ( ovrSession session, IUnknown * d3dPtr, const ovrMirrorTextureDesc * desc, ovrMirrorTexture * out_MirrorTexture )
Deprecated.
ovrResult
ovr_GetMirrorTextureBufferDX ( ovrSession session, ovrMirrorTexture mirrorTexture, IID iid, void ** out_Buffer )
Get a the underlying buffer as any compatible COM interface (similar to QueryInterface)

Detailed Description

Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.

Function Documentation

ovrResult ovr_CreateTextureSwapChainDX ( ovrSession session, IUnknown * d3dPtr, const ovrTextureSwapChainDesc * desc, ovrTextureSwapChain * out_TextureSwapChain )
Create Texture Swap Chain suitable for use with Direct3D 11 and 12.
Parameters
session
Specifies an ovrSession previously returned by ovr_Create.
d3dPtr
Specifies the application's D3D11Device to create resources with or the D3D12CommandQueue which must be the same one the application renders to the eye textures with.
desc
Specifies requested texture properties. See notes for more info about texture format.
bindFlags
Specifies what ovrTextureBindFlags the application requires for this texture chain.
out_TextureSwapChain
Returns the created ovrTextureSwapChain, which will be valid upon a successful return value, else it will be NULL. This texture chain must be eventually destroyed via ovr_DestroyTextureSwapChain before destroying the session with ovr_Destroy.
Returns an ovrResult indicating success or failure. In the case of failure, use ovr_GetLastErrorInfo to get more information.
Note:
The texture format provided in desc should be thought of as the format the distortion-compositor will use for the ShaderResourceView when reading the contents of the texture. To that end, it is highly recommended that the application requests texture as the compositor does sRGB-correct rendering. As such, the compositor relies on the GPU's hardware sampler to do the sRGB-to-linear conversion. If the application still prefers to render to a linear format (e.g. OVR_FORMAT_R8G8B8A8_UNORM) while handling the linear-to-gamma conversion via HLSL code, then the application must still request the corresponding sRGB format and also use the ovrTextureMisc_DX_Typeless flag in the ovrTextureSwapChainDesc's Flag field. This will allow the application to create a RenderTargetView that is the desired linear format while the compositor continues to treat it as sRGB. Failure to do so will cause the compositor to apply unexpected gamma conversions leading to gamma-curve artifacts. The ovrTextureMisc_DX_Typeless flag for depth buffer formats (e.g. OVR_FORMAT_D32_FLOAT) is ignored as they are always converted to be typeless.
ovrResult ovr_GetTextureSwapChainBufferDX ( ovrSession session, ovrTextureSwapChain chain, int index, IID iid, void ** out_Buffer )
Get a specific buffer within the chain as any compatible COM interface (similar to QueryInterface)
Parameters
session
Specifies an ovrSession previously returned by ovr_Create.
chain
Specifies an ovrTextureSwapChain previously returned by ovr_CreateTextureSwapChainDX
index
Specifies the index within the chain to retrieve. Must be between 0 and length (see ovr_GetTextureSwapChainLength), or may pass -1 to get the buffer at the CurrentIndex location. (Saving a call to GetTextureSwapChainCurrentIndex)
iid
Specifies the interface ID of the interface pointer to query the buffer for.
out_Buffer
Returns the COM interface pointer retrieved.
Returns an ovrResult indicating success or failure. In the case of failure, use ovr_GetLastErrorInfo to get more information.
Example code
ovr_GetTextureSwapChainBufferDX(s, d3d11Chain, 0, IID_ID3D11Texture2D, &d3d11Texture);
ovr_GetTextureSwapChainBufferDX(s, d3d11Chain, 1, IID_PPV_ARGS(&dxgiResource));
ovr_GetTextureSwapChainBufferDX(s, d3d12Chain, 0, IID_ID3D12Resource, &d3d12Texture);
ovrResult ovr_CreateMirrorTextureWithOptionsDX ( ovrSession session, IUnknown * d3dPtr, const ovrMirrorTextureDesc * desc, ovrMirrorTexture * out_MirrorTexture )
Create Mirror Texture which is auto-refreshed to mirror Rift contents produced by this application.
A second call to ovr_CreateMirrorTextureWithOptionsDX for a given ovrSession before destroying the first one is not supported and will result in an error return.
Parameters
session
Specifies an ovrSession previously returned by ovr_Create.
d3dPtr
Specifies the application's D3D11Device to create resources with or the D3D12CommandQueue which must be the same one the application renders to the textures with.
desc
Specifies requested texture properties. See notes for more info about texture format.
out_MirrorTexture
Returns the created ovrMirrorTexture, which will be valid upon a successful return value, else it will be NULL. This texture must be eventually destroyed via ovr_DestroyMirrorTexture before destroying the session with ovr_Destroy.
Returns an ovrResult indicating success or failure. In the case of failure, use ovr_GetLastErrorInfo to get more information.
Note:
The texture format provided in desc should be thought of as the format the compositor will use for the RenderTargetView when writing into mirror texture. To that end, it is highly recommended that the application requests a mirror texture format that is in sRGB-space (e.g. OVR_FORMAT_R8G8B8A8_UNORM_SRGB) as the compositor does sRGB-correct rendering. If however the application wants to still read the mirror texture as a linear format (e.g. OVR_FORMAT_R8G8B8A8_UNORM) and handle the sRGB-to-linear conversion in HLSL code, then it is recommended the application still requests an sRGB format and also use the ovrTextureMisc_DX_Typeless flag in the ovrMirrorTextureDesc's Flags field. This will allow the application to bind a ShaderResourceView that is a linear format while the compositor continues to treat is as sRGB. Failure to do so will cause the compositor to apply unexpected gamma conversions leading to gamma-curve artifacts.
Example code
ovrMirrorTexture     mirrorTexture = nullptr;
ovrMirrorTextureDesc mirrorDesc = {};
mirrorDesc.Format = OVR_FORMAT_R8G8B8A8_UNORM_SRGB;
mirrorDesc.Width  = mirrorWindowWidth;
mirrorDesc.Height = mirrorWindowHeight;
ovrResult result = ovr_CreateMirrorTextureWithOptionsDX(session, d3d11Device,
&mirrorDesc, &mirrorTexture);
[...]
// Destroy the texture when done with it.
ovr_DestroyMirrorTexture(session, mirrorTexture);
mirrorTexture = nullptr;
ovrResult ovr_CreateMirrorTextureDX ( ovrSession session, IUnknown * d3dPtr, const ovrMirrorTextureDesc * desc, ovrMirrorTexture * out_MirrorTexture )
Deprecated.
Use ovr_CreateMirrorTextureWithOptionsDX instead
Same as ovr_CreateMirrorTextureWithOptionsDX except doesn't use ovrMirrorOptions flags as part of ovrMirrorTextureDesc's MirrorOptions field, and defaults to ovrMirrorOption_PostDistortion
ovrResult ovr_GetMirrorTextureBufferDX ( ovrSession session, ovrMirrorTexture mirrorTexture, IID iid, void ** out_Buffer )
Get a the underlying buffer as any compatible COM interface (similar to QueryInterface)
Parameters
session
Specifies an ovrSession previously returned by ovr_Create.
mirrorTexture
Specifies an ovrMirrorTexture previously returned by ovr_CreateMirrorTextureWithOptionsDX
iid
Specifies the interface ID of the interface pointer to query the buffer for.
out_Buffer
Returns the COM interface pointer retrieved.
Returns an ovrResult indicating success or failure. In the case of failure, use ovr_GetLastErrorInfo to get more information.
Example code
ID3D11Texture2D* d3d11Texture = nullptr;
ovr_GetMirrorTextureBufferDX(session, mirrorTexture, IID_PPV_ARGS(&d3d11Texture));
d3d11DeviceContext->CopyResource(d3d11TextureBackBuffer, d3d11Texture);
d3d11Texture->Release();
dxgiSwapChain->Present(0, 0);
1
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
43
62
63
64
65
66
67
68
92
93
94
95
96
97
98
99
151
152
153
154
155
156
157
165
166
167
168
169
170
171
192
193
194
195
196
197
198
199
200
201
202
203
/********************************************************************************/
#ifndef OVR_CAPI_D3D_h
#define OVR_CAPI_D3D_h

#include "OVR_CAPI.h"
#include "OVR_Version.h"

#if defined(_WIN32)
#include <Unknwn.h>
#include <guiddef.h>

#if !defined(OVR_EXPORTING_CAPI)

//-----------------------------------------------------------------------------------
// ***** Direct3D Specific

//        swapchain formats that are in sRGB-space (e.g. OVR_FORMAT_R8G8B8A8_UNORM_SRGB)
OVR_PUBLIC_FUNCTION(ovrResult)
ovr_CreateTextureSwapChainDX(
    ovrSession session,
    IUnknown* d3dPtr,
const ovrTextureSwapChainDesc* desc,
    ovrTextureSwapChain* out_TextureSwapChain);

OVR_PUBLIC_FUNCTION(ovrResult)
ovr_GetTextureSwapChainBufferDX(
    ovrSession session,
    ovrTextureSwapChain chain,
int index,
    IID iid,
void** out_Buffer);

OVR_PUBLIC_FUNCTION(ovrResult)
ovr_CreateMirrorTextureWithOptionsDX(
    ovrSession session,
    IUnknown* d3dPtr,
const ovrMirrorTextureDesc* desc,
    ovrMirrorTexture* out_MirrorTexture);

OVR_PUBLIC_FUNCTION(ovrResult)
ovr_CreateMirrorTextureDX(
    ovrSession session,
    IUnknown* d3dPtr,
const ovrMirrorTextureDesc* desc,
    ovrMirrorTexture* out_MirrorTexture);

OVR_PUBLIC_FUNCTION(ovrResult)
ovr_GetMirrorTextureBufferDX(
    ovrSession session,
    ovrMirrorTexture mirrorTexture,
    IID iid,
void** out_Buffer);

#endif // !defined(OVR_EXPORTING_CAPI)

#endif // _WIN32

#endif // OVR_CAPI_D3D_h
The documentation for this file was generated from the following file: Include/OVR_CAPI_D3D.h