如何将 D3D11On12 渲染目标映射到内存?
How to Map a D3D11On12 render target to memory?
我正在尝试将屏幕外 D2D 渲染目标映射到内存。
- 渲染目标创建为
ID3D12Resource
和 D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET
- 然后通过
ID3D11On12Device::CreateWrappedResource()
- 然后用
ID2D1DeviceContext2::CreateBitmapFromDxgiSurface
做成了ID2D1Bitmap1
应用程序使用 D2D 在其上绘制,然后将其用作 D3D12 着色器中的像素着色器资源,我可以通过这种方式验证纹理内容是否正确。
但是,如果我通过 CopyTextureRegion
将它复制到 D3D12_HEAP_TYPE_READBACK
资源,它返回时完全设置为 0。我使用的代码适用于其他纹理。我在 D3D11DeviceContext
刷新后尝试过,也在屏幕显示完成后尝试过。
我也试过复制映射到D2D领域,结果一样。我觉得这个资源在某些方面很特别,我错过了一些东西。
我解决了这个问题。问题是我输出到一个没有 alpha 支持的位图,并结合了错误的 BlendDesc 参数。我确认 D3D11On12 离屏渲染目标在复制到回读资源时与任何其他资源的工作方式相同。
我正在尝试将屏幕外 D2D 渲染目标映射到内存。
- 渲染目标创建为
ID3D12Resource
和D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET
- 然后通过
ID3D11On12Device::CreateWrappedResource()
- 然后用
ID2D1DeviceContext2::CreateBitmapFromDxgiSurface
做成了
ID2D1Bitmap1
应用程序使用 D2D 在其上绘制,然后将其用作 D3D12 着色器中的像素着色器资源,我可以通过这种方式验证纹理内容是否正确。
但是,如果我通过 CopyTextureRegion
将它复制到 D3D12_HEAP_TYPE_READBACK
资源,它返回时完全设置为 0。我使用的代码适用于其他纹理。我在 D3D11DeviceContext
刷新后尝试过,也在屏幕显示完成后尝试过。
我也试过复制映射到D2D领域,结果一样。我觉得这个资源在某些方面很特别,我错过了一些东西。
我解决了这个问题。问题是我输出到一个没有 alpha 支持的位图,并结合了错误的 BlendDesc 参数。我确认 D3D11On12 离屏渲染目标在复制到回读资源时与任何其他资源的工作方式相同。