DX12学习笔记(龙书)(小点7:根签名)

本文深入解析DirectX12中的根签名概念,探讨其如何在GPU寄存器与着色器资源间搭建桥梁,以及描述符在资源绑定与流水线阶段中的作用。

首先推荐amebabyRockSun_QQ的《DirectX12(D3D12)基础教程(二)——理解根签名、初识显存管理和加载纹理、理解资源屏障》
链接:https://blog.csdn.net/u014038143/article/details/83067300
教会了我不少关于根签名的知识。

经过2天的学习,大致了解了根签名是一种怎样的东西。暂时先以以下这种方式这理解,如果有后续更改会直接修改的。(也许错到离谱……(真的在好好学习的小伙伴就别看了),先这么记录了。)

  1. GPU上有很多寄存器,比如t,比如b,比如s。
  2. 每个寄存器有很多位置,比如b1,b2
  3. 一个着色器在定义上就表明自己会在哪个寄存器上找资源,比如cbuffer obPerObject :register(b0)
  4. 到了渲染的时候,着色器要去各种寄存器上取资源的时候,我们要把资源放到寄存器上面去。
  5. 所以在渲染之前,就用SetGraphicsRootDescriptorTable方法,把【这函数参数的结构】和【各种资源、位置、大小、类型等信息(就是描述符)】绑定起来。
  6. 所以在使用SetGraphicsRootDescriptorTable之前,我们要使用SetGraphicsRootSignature方法和SetDescriptorHeap的方法,知道【这函数参数的结构】(用index)和【各种资源、位置、大小、类型等信息(就是描述符)】(描述符指针地址) 的源数据是哪里。因为有很多根签名,也有很多描述符。
  7. 根据根签名定义的参数结构去取得资源。具体取得的过程需要借助述符的数据。
  8. 描述符会指定资源数据,还会告知资源即将被绑定在流水线的哪个阶段上。
  9. 取得数据会放到寄存器上,然后着色器会依次使用它们。
  10. 完成渲染。

不过不知不觉又产生了对描述符的疑问。描述符也是在流水线开始前就创建了的。但是资源不能与渲染流水线的阶段直接绑定,所以要为资源创建视图(描述符),并将其绑定到流水线阶段。这个创建是一劳永逸的吗?


在创建视图时,我们把这个描述符和资源绑定起来(视图其实就是这个意思)。 BuildConstantBufferViews() 这件事也需要在draw之前。
视图像是绑定这两者。(一边是之前建立的描述符,一边是资源数据地址)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值