首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenXR在xrEndFrame上的奇怪行为

OpenXR在xrEndFrame上的奇怪行为
EN

Stack Overflow用户
提问于 2021-06-07 07:43:46
回答 1查看 163关注 0票数 0

首先,上下文为VR,其中包含G2、WMR运行时、DX12。

在使用OpenXR时,我们在开发人员机器上看到了一些无法解释的行为。它似乎认为OpenXR运行时正在根据首选GPU的机器设置改变它的显示方式。

更具体地说,我们注意到,根据首选GPU的机器设置,我们看到了调用XrEndFrame时使用的不同方法。这是一个很大的问题,因为不同的方法会导致空白屏幕被绘制到我们当前的renderTarget中!

不同之处在于,当首选设备是Nvidia GPU时,xrEndFrame在PIX中是这样的(在与我们的主要呈现分离的图形队列中):

代码语言:javascript
复制
Index   Global ID   Name    EOP to EOP Duration (ns)    Execution Start Time (ns)
2   8063    Signal(pFence:obj#20, Value:62)     
3   8064    Wait(pFence:obj#36, Value:31)       
5   8065    CopyTextureRegion(pDst:{pResource:obj#4083, Type:D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, SubresourceIndex:0}, DstX:0, DstY:0, DstZ:0, pSrc:{pResource:obj#4084, Type:D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, SubresourceIndex:0}, pSrcBox:{left:0, top:0, front:0, right:2088, bottom:2036, back:1})      
6   8066    CopyTextureRegion(pDst:{pResource:obj#4083, Type:D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, SubresourceIndex:1}, DstX:0, DstY:0, DstZ:0, pSrc:{pResource:obj#4085, Type:D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX, SubresourceIndex:0}, pSrcBox:{left:0, top:0, front:0, right:2088, bottom:2036, back:1})      
8   8067    Signal(pFence:obj#20, Value:63)     
9   8068    Signal(pFence:obj#21, Value:31)     

而当它不是,(例如,不知何故可能获得了英特尔在飞机上?)看起来是这样的:

代码语言:javascript
复制
Index   Global ID   Name    EOP to EOP Duration (ns)    Execution Start Time (ns)
0   8064    Wait(pFence:obj#45, Value:21)       
2   8065    ClearRenderTargetView(RenderTargetView:res#4008, ColorRGBA:{Element:0, Element:0, Element:0, Element:0}, NumRects:0, pRects:nullptr)        
15  8066    DrawIndexedInstanced(IndexCountPerInstance:4, InstanceCount:2, StartIndexLocation:0, BaseVertexLocation:0, StartInstanceLocation:0)     
17  8067    Signal(pFence:obj#22, Value:23)     
18  8068    Signal(pFence:obj#23, Value:21)     

后者正在清除当前的renderTargetView,并在顶部绘制一个四角图,即耳机显示器的尺寸。

然而-我们已经检查了渲染代码,它绝对没有选择英特尔的图形设备。然而,如果我们在nvidia控制面板中将“首选图形处理器”设置为nvidia gpu,那么第二种行为就会消失。

我们还可以看到,上述行为是调用XrEndFrame的结果,否则我们的呈现代码是相同的。

关于运行时的哪个部分可能正在查看或受此设置影响的线索吗?

不幸的是(偶然?)我们发现我们需要在呈现代码上工作,以便能够交换运行时,比如SteamVR,所以现在我们不能交换运行时。

显然,我们有一个解决办法,就是设置首选的设备。但是,了解这个问题是如何/为什么发生的将是很好的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-20 10:03:02

因此,这最终被追踪到我们的错误。在我们的例子中,我们使用xrGetD3D12GraphicsRequirementsKHR来获得openxr的最低图形要求。

它在结构adapterLuid中有一个XrGraphicsRequirementsD3D12KHR标识符,我们应该使用它来选择图形API中的GPU,但是没有。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67867743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档