资源与描述符

在渲染处理的过程中,GPU可能会对资源进行读和写两种操作,在发出绘制命令之前,我们需要将与本次绘制调用(draw call)相关的资源绑定(bind或称链接,link)到渲染流水线上。部分资源可能在每次绘制调用的时候都有所变化,所以我们就每次更新绑定。但是,GPU资源并非直接与渲染流水线进行绑定的,而是通过一种名叫描述符(descriptor)的对象对它简介引用,我们可以把描述符是为一种对送往GPU的资源进行描述的轻量型结构。从本质上来讲,它实际上即为一个中间层;若指定了资源描述符,GPU将能获取实际的资源数据,也能了解到资源的必要信息。因此,我们将把绘制调用的资源,通过指定描述符的方式绑定到渲染流水线。

GPU对资源的读和写
读:例如,从描述物体表面样貌的纹理或者存有3D场景中几何体位置信息的缓冲区中读取数据。
写:例如,向后台缓冲区或深度/模板缓冲区写入数据。

为什么我们额外使用描述符这个中间层呢?究其原因,GPU资源实质上都是一些普通的内存块。由于资源的这种通用性,它们便能被设置到渲染流水线的不同阶段供其使用。一个常见的例子先把纹理用作渲染目标(即Direct3D绘制到纹理技术),随后再将该资源作为一个着色器资源(即此纹理会经采样用作为着色器输入数据)。不管是充当渲染目标·深度/模板缓冲区还是着色器等角色,仅靠资源本是无法体现出来的。而且,我们有时只希望将资源中的部分数据绑定之渲染流水线,但如何从整个资源中将它们提取出来呢?在这创建一个数据可能用的是无类型格式,这样的话,GPU甚至不知道这个资源的具体格式。
解决上述问题就是引入描述符的原因。除了指定资源数据,描述符还会为GPU解释资源:它们会告知Direct3D某个资源该如何使用(即该资源将被绑定到渲染流水线的哪个阶段上),而且我们可借助描述符来指定欲绑定资源的局部数据。这就是说,如果某个资源在创建的时候采用的无类型格式,那么我们必须在为它创建描述符时指明其具体类型。

注意
视图(view)与描述符(descriptor)是同义词。“视图”虽是Direct3D先前版本中的常用术语,但它仍然沿用在Direct3D 12的部分API中。例如,“常量缓冲区视图(constant buffer view)”与“常量缓冲区视图(constant buffer description)”表达的是同一事物。

每个描述符都有一种具体类型,此类型指明了资源的具体作用。常用的描述符如下:
1.CBV/SRV/UAV 描述符分给表示的是常量缓冲区视图(costant buffer view)、着色器资源视图(shader resource view)和无序访问视图(unordered buffer view)这三种资源。
2.采样器(sampler,亦有译为取样器)描述符表示的是采样器资源(用于纹理贴图)。
3.RTV描述符表示的是渲染目标视图资源(render target view)。
4.DSV描述符表示的是深度/模板视图资源(depth/stencil view)。
描述符堆(descriptor heap)中存在一系列描述符(可将其看成是描述符数组),本质上是存放用户程序中某种特定描述符的一块内存。我们需要为每一种类型的描述符创建出单独的描述符堆。另外,也可以为同一种描述符类型创建多个描述符堆。
我们能用多个描述符来引用同一个资源。例如,可以通过多个描述符来引用同一个资源中不同的局部数据。而且,前文曾提到过,一种资源可以绑定到渲染流水线的不同阶段。因此,对于每个阶段都需要独立的描述符。例如,当一个纹理需要被用作渲染目标与着色器资源时,我们就要为它分别创建两个描述符:一个RTV描述符和一个SRV描述符。类似地,如无类型格式创建了一个资源,又希望该纹理中的元素可以根据需求当作浮点值或整数值使用,那么就需要为它分别创建两个描述符:一个指定为浮点格式,另一个指定为帧数格式。
创建描述符的最佳时机为初始化期间。由于在此过程中需要执行一些类型的检测和验证工作,所以最好不要在运行时(runtime)才创建描述符。

注意
2009年8月的SDK文档写到:“所谓创建一个完整类型的资源,即在创建的伊始就确定了它的具体格式。这将使运行时的访问操作得到优化[.. .. ..]。”因此,当确实需要用到无类型资源多带来得灵活性时(即根据不同视图对同一种数据进行多种不同解释的能力),再以这种方式来创建资源,否则应创建完整类型的资源。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容