gpt4 book ai didi

directx-12 - 在D3D12中,渲染目标 View 可以是任何缓冲区吗?

转载 作者:行者123 更新时间:2023-12-03 09:11:29 24 4
gpt4 key购买 nike

在到目前为止我看过的示例中,一些命令类似于:

  1. D3D12_DESCRIPTOR_HEAP_DESC 与 D3D12_DESCRIPTOR_HEAP_TYPE::D3D12_DESCRIPTOR_HEAP_TYPE_RTV
  2. ID3D12Device::CreateDescriptorHeap
  3. D3D12_CPU_DESCRIPTOR_HANDLE 与 ID3D12DescriptorHeap::GetCPUDescriptorHandleForHeapStart(也许还有 ID3D12Device::GetDescriptorHandleIncrementSize)
  4. (可选?)ID3D12Device::CreateRenderTargetView
    1. (可选?)IDXGISwapChain3::GetBuffer
  5. 将渲染内容安排到命令列表,特别是 OMSetRenderTargets 和 DrawInstanced,然后关闭命令列表。
  6. ID3D12CommandQueue::执行命令列表
    1. (可选?)IDXGISwapChain3::Present
  7. 使用 ID3D12CommandQueue::Signal 在栅栏上安排信号
  8. 使用 ID3D12Fence::SetEventOnCompletion 和 WaitForSingleObjectEx 等待 GPU 完成

如果可能,如何用选择的缓冲区替换步骤 4.1? IE。如何创建一个 ID3D12Resource* 并渲染它,然后从它读取到 std::vector 中? (我假设如果可能的话,可以忽略步骤 6.1,因为没有可供交换链呈现的渲染目标 View 。也许在这种情况下步骤 4 也是不必要的?也许只有 OMSetRenderTargets 重要?)

最佳答案

渲染目标的确切位置取决于视频内存架构。在某些系统上,它位于只有视频卡可以访问的专用视频内存中。在某些系统中,它位于通过总线共享的视频内存中,CPU 和 GPU 都可以访问。在统一内存架构中,一切都在系统内存中。

因此,您对渲染目标的确切位置存在限制。这就是为什么在创建计划绑定(bind)为渲染目标的 ID3D12Resource 时必须使用 D3D12_HEAP_TYPE_DEFAULT 并指定 D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET(这是在创建交换链时由 DXGI 隐式完成的)渲染目标也是如此)。

一般来说,您不能也不应该使用低级 DXGI 表面创建 API 来创建 Direct3D 资源。它们主要供系统使用而不是由应用程序使用。

Unless you happen to be on a UMA system, you should minimize the CPU access to the render target as it will require expensive copies otherwise. Even on UMA systems, there's also required de-tiling as well to get the results into a linear form.

Direct3D 12 还提供了“放置资源”方法,可以更好地控制内存的确切分配位置(或更具体地说虚拟内存地址的分配位置),但您仍然必须遵守底层体系结构限制。根据内存架构,您可以“别名”多个不同的 ID3D12Resource 实例,所有实例都使用相同的内存(例如渲染目标被别名为无序访问资源),但您负责将所需的资源屏障插入到命令列表中(并测试它)以确保它在所有 DX12 硬件上可靠地工作。请参阅MSDN .

如果您不需要用户看到结果,则不必呈现您的渲染目标。

Memory Management Strategies

UMA Optimizations: CPU Accessible Textures and Standard Swizzle

Getting Started with Direct3D 12

If you are new to DirectX 12, you should see the DirectX Tool Kit for DirectX 12 tutorials. If you aren't already familiar with DirectX 11, you should wait on DirectX 12 and start with DirectX Tool Kit for DirectX 11.

关于directx-12 - 在D3D12中,渲染目标 View 可以是任何缓冲区吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42042132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com