问题标签 [direct3d11on12]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1913 浏览

resize - ID3D11On12Device::AcquireWrappedResources() 中的额外交换链缓冲区引用

我对使用“Direct 3D 11 on 12”库很感兴趣,但是在调整窗口大小时遇到​​了麻烦。特别是,我正在修改 Visual Studio“DirectX 12 App”示例。

在示例创建 ID3D12CommandQueue 之后,我正在创建 ID3D11On12Device:

然后,当示例创建其渲染目标视图时,我添加了包装 ID3D11Resource 的创建:

然后,在创建了其余的 D3D12 资源之后,我正在测试 ID3D11On12Device::AcquireWrappedResources() 和 ID3D11On12Device::ReleaseWrappedResources() (只是作为测试,尽量使代码尽可能简单)

到目前为止,一切似乎都按预期工作。但是,在调整窗口大小时会出现问题。特别是,调整大小调用 IDXGISwapChain3::ResizeBuffers()。发生这种情况时,ResizeBuffers() 返回失败,并且控制台上显示以下消息:

我尝试在 ResizeBuffers() 之前清除 m_wrappedBackBuffers 引用:

但这似乎没有效果。我还尝试过对 ID3D11DeviceContext 进行 Flush()ing 和 ClearState()ing,但这些似乎没有效果或产生以下错误:

注释掉 ID3D11On12Device::AcquireWrappedResources() 和 ID3D11On12Device::ReleaseWrappedResources() 调用使 ResizeBuffers() 成功返回;但似乎需要调用这两个函数才能完全使用该库。

似乎在某个地方,ID3D11On12Device 或 ID3D11DeviceContext 保留了对交换链缓冲区的引用,但我无法找到任何有关如何在不破坏整个设备的情况下重置此引用的文档。

GitHub 上的这个问题似乎与我遇到的问题相同;但是,响应涉及“在 D2D 上下文中调用 SetTarget(nullptr)”,但我在这个项目中根本没有接触过 Direct2D(并且 Visual Studio 模板已经在 IDXGISwapChain3::ResizeBuffers() 之前调用了 WaitForGpu())。

Microsoft 的示例根本不包括交换链缓冲区大小调整。运行示例会导致交换链被拉伸以适应窗口。

我在 Microsoft 的文档中没有找到任何关于调整大小的信息。

0 投票
1 回答
120 浏览

windows-phone-8.1 - Windows 10 移动版 Direct3D

我有一个针对使用 Direct3D11 的 Windows Phone 8.1 的 C++ 项目,

我尝试将该项目与 Windows 10 移动设备一起使用,但在以下行中失败:

返回错误代码 0x887A002D -> DXGI_ERROR_SDK_COMPONENT_MISSING,

知道如何在 Windows 10 移动设备上完成这项工作(最好不要将项目迁移到通用应用程序项目)?

0 投票
1 回答
141 浏览

direct3d12 - 如何将 D3D11On12 渲染目标映射到内存?

我正在尝试将屏幕外 D2D 渲染目标映射到内存。

  • 渲染目标被创建为ID3D12ResourcewithD3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET
  • 然后通过ID3D11On12Device::CreateWrappedResource()
  • 然后做成一个ID2D1Bitmap1withID2D1DeviceContext2::CreateBitmapFromDxgiSurface

该应用程序使用 D2D 对其进行绘制,然后将其用作 D3D12 着色器中的像素着色器资源,我可以通过这种方式验证纹理的内容是否正确。

但是,如果我通过 将它复制到D3D12_HEAP_TYPE_READBACK资源CopyTextureRegion,它会返回完全设置为 0。我使用的代码适用于其他纹理。我在D3D11DeviceContext刷新后尝试过,并且在完成屏幕呈现后也尝试过。

我也尝试在 D2D 领域中复制和映射它,但我得到了相同的结果。我觉得这个资源在某种程度上很特别,我错过了一些东西。