【D3D12学习手记】4.1.6 Resources and Descriptors
在渲染过程中,GPU将写资源(resources)(例如,后缓冲区,深度/模板缓冲区),读资源(例如,描述表面外观的纹理,存储场景中几何体3D位置的缓冲区)。在我们发出绘图命令之前,我们需要将资源绑定(或链接)(bind (or link))到将在该绘制调用中引用的渲染管道。有些资源可能每次绘制被调用时都会变化,因此我们需要在必要时更新每个绘制调用(draw call)的绑定。但是,GPU资源不是直接被绑定的。相反,资源是通过描述符对象(descriptor object)引用的,可以将其视为描述GPU资源的轻量级结构。从本质上讲,它是间接的一层(a level of indirection);给定资源描述符,GPU可以获得实际的资源数据并知道有关它的必要信息。我们通过指定将在draw call中引用的描述符将资源绑定到呈现管道。
为什么要使用描述符这种额外的间接层次?原因是GPU资源本质上是通用的内存块。资源保持通用,因此可以在渲染管道的不同阶段使用它们;一个常见的例子是使用纹理作为渲染目标(即,Direct3D绘制到纹理中),然后又被用作着色器(shader)资源(即,纹理将被采样并用作着色器的输入数据)。资源本身并不表示它是否被用作渲染目标,深度/模板缓冲区或着色器资源。另外,也许我们只想将资源数据的子区域绑定到渲染管道 - 我们如何在给定整个资源的情况下做到这一点?此外,可以使用无类型格式创建资源,因此GPU甚至不知道资源的格式。
这是描述符的来历。除了识别资源数据之外,描述符还向GPU描述资源:它们告诉Direct3D资源将如何使用(即,您将绑定它到管道的哪个阶段),在适用的情况下可以指定我们想要在描述符中绑定的资源的子区域,如果资源格式在创建时被指定为无类型,那么我们现在必须在创建描述符时声明类型。
旁注:视图(view)是描述符(descriptor)的同义词。 术语“视图”在Direct3D的早期版本中使用,它仍然在Direct3D 12 API的某些部分中使用。 我们在本书中互换使用; 例如,常量缓冲区视图和常量缓冲区描述符是同一回事。
描述符有一个类型,类型暗示了资源的使用方式。我们在本书中使用的描述符类型是:
1.CBV / SRV / UAV描述符描述了常量缓冲区(constant buffers),着色器资源(shader resources)和无序访问视图资源(unordered access view resources)。
2.采样器描述符(Sampler descriptors)描述采样器资源(用于纹理化(texturing))。
3.RTV描述符描述渲染目标资源。
3.DSV描述符描述深度/模板(depth/stencil)资源。
描述符堆(a descriptor heap)是描述符的数组(array );它是应用程序使用的特定类型的所有描述符的内存支持。对于每种类型的描述符,您将需要单独的描述符堆。您还可以创建相同描述符类型的多个堆。
我们可以有多个描述符引用相同的资源。例如,我们可以有多个描述符引用资源的不同子区域。而且,如上所述,资源可以绑定到渲染管道的不同阶段。对于每个阶段,我们需要一个单独的描述符。对于使用纹理作为渲染目标和着色器资源的示例,我们需要创建两个描述符:RTV类型描述符和SRV类型描述符。类似地,如果您使用无类型格式创建资源,则可以将纹理的元素视为浮点值或整数,例如;这将需要两个描述符,其中一个描述符指定浮点格式,另一个描述符指定整数格式。
应在初始化时创建描述符。这是因为发生了一些类型检查和验证(This is because there is some type checking and validation that occurs),最好在初始化时而不是运行时执行此操作。
旁注:2009年8月的SDK文档说:“创建完全类型的资源(fully-typed resource)会将资源限制为它创建时的格式。 这使得运行时能够优化访问[...]。“因此,如果您确实需要它们提供的灵活性(能够以多种方式使用多个视图重新解释数据),您应该只创建无类型资源; 否则,创建一个完全类型的资源。
【D3D12学习手记】4.1.6 Resources and Descriptors的更多相关文章
- 【D3D12学习手记】The Command Queue and Command Lists
GPU有一个命令队列,CPU通过Direct3D API将命令提交到队列里来使用命令列表(command lists),如下图.当一套命令(a set of commands)已经被提交到命令队列,他 ...
- 【D3D12学习手记】4.3.8 Create the Depth/Stencil Buffer and View
我们现在需要创建深度/模板缓冲区. 如§4.1.5所述,深度缓冲区只是一个2D纹理,用于存储最近的可见对象的深度信息(如果使用模板(stencil),则也会存储模板信息). 纹理是一种GPU资源,因此 ...
- 【D3D12学习手记】The Swap Chain and Page Flipping
为了避免动画中的闪烁,最好将整个动画帧绘制到称为后台缓冲区的屏幕外纹理(off-screen texture)中.一旦整个场景被绘制到给定动画帧的后缓冲区,它就作为一个完整的帧呈现给屏幕;以这种方式, ...
- 【D3D12学习手记】CPU/GPU Synchronization
由于有两个并行运行的处理器(CPU和GPU),会出现许多同步问题.假设我们有一些资源R存储了我们希望绘制的某些几何体的位置. 此外,假设CPU更新R的数据以存储位置p1,然后将引用R的绘图命令C添加到 ...
- Linux.NET学习手记(7)
前一篇中,我们简单的讲述了下如何在Linux.NET中部署第一个ASP.NET MVC 5.0的程序.而目前微软已经提出OWIN并致力于发展VNext,接下来系列中,我们将会向OWIN方向转战. 早在 ...
- Linux.NET学习手记(8)
上一回合中,我们讲解了Linux.NET面对OWIN需要做出的准备,以及介绍了如何将两个支持OWIN协议的框架:SignalR以及NancyFX以OwinHost的方式部署到Linux.NET当中.这 ...
- 关于《Linux.NET学习手记(8)》的补充说明
早前的一两天<Linux.NET学习手记(8)>发布了,这一篇主要是讲述OWIN框架与OwinHost之间如何根据OWIN协议进行通信构成一套完整的系统.文中我们还直接学习如何直接操作OW ...
- EF框架学习手记
转载: [ASP.NET MVC]: - EF框架学习手记 1.EF(Entity Framework)实体框架EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架 ...
- ExtJS MVC 学习手记3
在演示应用中,我们已经创建好了viewport,并为之添加了一个菜单树.但也仅仅是这样,点击树或应用的其他地方获得不到任何响应.这个演示应用还是一个死的应用. 接下来,我们让这个应用活起来. 首先,给 ...
随机推荐
- 开源框架相关面试问题-retrofit网络框架面试问题讲解
retrofit使用简介: 在retrofit中通过一个接口作为Http请求的api接口.注意:@GET("url")中的url只是一个路径,不包含主机号的. 创建一个retrof ...
- 在配置tensorflow时踩的无数个坑
在下午尝试配置tensorflow环境时,遇到了许多天坑,讲真的心态炸了好几次,特此写下这篇记录,希望能给看到朋友一点帮助. 先说一下这抓狂的一天的起因,比赛项目想用SVM进行一下数据分析,除了常规的 ...
- Ubuntu各个版本下载
官网:https://www.ubuntu.com/download/desktop 没找到历史版本,且下载速度很慢 在网易镜像站下载ubuntu: 网址:http://mirrors.163.com ...
- 函数参数-undefined-默认值-可选参数
1.函数参数为undefined时,触发参数默认值 2.实参数量 < 形参数量,多余的形参值为 underfined 3.设置可选参数 1)JS中: 检测 undefined :function ...
- Java-JsonUtil工具类
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; i ...
- python--UUID唯一标识符
UUID: 通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的唯一性. 它是通过MAC地址, 时间戳, 命名空间, 随机 ...
- [Algorithm] Finding Prime numbers - Sieve of Eratosthenes
Given a number N, the output should be the all the prime numbers which is less than N. The solution ...
- 题解 【BZOJ4700】适者
题面 解析 看了好多dalao们的题解,然而还是不明白... 于是在想了半天后,决定自己写一篇题解. step 1 首先,分析题意, 应该还是比较容易想到, 要一直攻击一个兵器, 直到破坏它为止. 因 ...
- (转载)Google 发布 Android 性能优化典范
2015年伊始,Google发布了关于Android性能优化典范的专题, 一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中 ...
- java中子类继承父类时是否继承构造函数
来源:http://www.cnblogs.com/sunnychuh/archive/2011/09/09/2172131.html --------------------- java继承中对构造 ...