Direct3D - 术语专场,管线

1、设备

1.1、设备对象

设备用于创建资源和枚举显示适配器的功能
每个设备可以使用一个或多个设备上下文,具体取决于所需的功能。

1.2、设备上下文

设备上下文包含使用设备的环境或设置。更具体地说,设备上下文用于设置管道状态并使用设备拥有的资源生成渲染命令。

1.2.1 即时上下文

device 和 ImmediateContext 一一对应。
直接上下文直接呈现给驱动程序。每个设备都有一个且只有一个可以从 GPU 检索数据的直接上下文。即时上下文可用于立即呈现(或回放)命令列表。

有两种方法可以获取即时上下文:

  • 通过调用D3D11CreateDevice或D3D11CreateDeviceAndSwapChain。
  • 通过调用ID3D11Device::GetImmediateContext。

1.2.2 延迟上下文

延迟上下文将 GPU 命令记录到命令列表中。延迟上下文主要用于多线程,单线程应用程序不需要。

延迟上下文通常由工作线程而不是主渲染线程使用。创建延迟上下文时,它不会从直接上下文继承任何状态。

要获取延迟上下文,请调用ID3D11Device::CreateDeferredContext。

任何上下文——立即或延迟——都可以在任何线程上使用,只要该上下文一次只在一个线程中使用。

1.3设备类型

D3D_DRIVER_TYPE

  • D3D_DRIVER_TYPE_HARDWARE : 速度最快,在硬件中实现 Direct3D 功能
  • D3D_DRIVER_TYPE_REFERENCE:参考驱动程序,它是支持每个 Direct3D 功能的软件实现。。参考驱动器是为精度而不是速度而设计的,因此速度慢但准确。
  • D3D_DRIVER_TYPE_NULL :NULL 驱动程序,它是没有渲染功能的参考驱动程序。此驱动程序通常用于调试非渲染 API 调用。
  • D3D_DRIVER_TYPE_SOFTWARE:一个软件驱动,就是一个完全用软件实现的驱动。由于其性能非常慢,该软件实现不适用于高性能应用程序。
  • D3D_DRIVER_TYPE_WARP: WARP 驱动程序,它是一种高性能软件光栅化器。高级光栅化平台 (WARP) 。

1.4 WARP

高级光栅化平台 (WARP)

1.5 硬件

此图显示 Direct3D 11 如何支持新硬件和现有硬件。
在这里插入图片描述
在 Direct3D 11 中,引入了一种称为功能级别的新范式。功能级别是一组明确定义的 GPU 功能。使用功能级别,您可以将 Direct3D 应用程序定位为在 Direct3D 硬件的下层版本上运行。

功能级别
描述 Direct3D 设备所针对的一组功能。

typedef enum D3D_FEATURE_LEVEL {
   
  D3D_FEATURE_LEVEL_1_0_CORE,
  D3D_FEATURE_LEVEL_9_1,
  D3D_FEATURE_LEVEL_9_2,
  D3D_FEATURE_LEVEL_9_3,
  D3D_FEATURE_LEVEL_10_0,
  D3D_FEATURE_LEVEL_10_1,
  D3D_FEATURE_LEVEL_11_0,
  D3D_FEATURE_LEVEL_11_1,
  D3D_FEATURE_LEVEL_12_0,
  D3D_FEATURE_LEVEL_12_1,
  D3D_FEATURE_LEVEL_12_2
} ;

2、资源

通常,资源包括纹理数据、顶点数据和着色器数据。
您可以创建强类型或无类型的资源;您可以控制资源是否具有读写权限;您可以使资源仅可由 CPU、GPU 或两者访问。每个流水线阶段最多可以有 128 个资源处于活动状态。
Direct3D 资源的生命周期是:

  • 使用ID3D11Device接口的创建方法之一创建资源。
  • 使用上下文和ID3D11DeviceContext接口的设置方法之一将资源绑定到管道。
  • 通过调用资源接口的Release方法来释放资源。

全类型和无类型

  • Typed - 完全指定类型在创建资源时。
  • Typeless - 完全指定资源类型在绑定到管道时。

资源视图(Views)

资源可以以通用存储器格式存储,以便它们可以由多个流水线阶段共享,管道阶段使用视图解释资源数据。资源视图在概念上类似于转换资源数据,以便它可以在特定上下文中使用。

视图还公开了其他功能,例如在着色器中回读深度/模板表面的能力,在单次传递中生成动态立方体贴图,以及同时渲染到体积的多个切片。
在这里插入图片描述

Raw Views of Buffers

shader resource view (SRV)
unordered access view (UAV)

资源的限制

具体查看
https://docs.microsoft.com/en-us/windows/win32/direct3d11/overviews-direct3d-11-resources-limits
在这里插入图片描述

子资源

缓冲区被定义为单个子资源
在这里插入图片描述

Buffers

缓冲区包含用于描述几何、索引几何信息和着色器常量的数据。
缓冲区资源是分组为元素的完全类型化数据的集合。您可以使用缓冲区来存储各种数据,包括位置向量、法线向量、顶点缓冲区中的纹理坐标、索引缓冲区中的索引或设备状态。一个缓冲区元素由 1 到 4 个组件组成。缓冲区元素可以包括打包数据值(如 R8G8B8A8 表面值)、单个 8 位整数或四个 32 位浮点值。

顶点缓冲区

顶点缓冲区包含用于定义几何的顶点数据。顶点数据包括位置坐标、颜色数据、纹理坐标数据、法线数据等。
顶点缓冲区包含完全指定 3D 顶点所需的所有数据。这方面的一个例子可能是一个包含每个顶点位置、法线和纹理坐标的顶点缓冲区。这些数据通常被组织为一组逐顶点元素,如下图所示
在这里插入图片描述

D3D11_BUFFER_DESC  bd;
    memset(&bd, 0, sizeof(D3D11_BUFFER_DESC));
    bd.ByteWidth = sizeof(s_vertex);
    bd.Usage = D3D11_USAGE_DEFAULT;
    bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
    bd.CPUAccessFlags = 0u;
    bd.MiscFlags = 0u;
    bd.StructureByteStride = sizeof(Vertex);

    D3D11_SUBRESOURCE_DATA sd = {
   };
    sd.pSysMem = s_vertex;
    HRESULT hr = winD3D11Context->getDevice()->CreateBuffer(&bd, &sd, &m_pVertextBuffer);

索引缓冲区

索引缓冲区包含顶点缓冲区的整数偏移量,用于更有效地渲染图元。索引缓冲区包含一组连续的 16 位或 32 位索引;每个索引用于标识顶点缓冲区中的一个顶点。索引缓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值