Texture 是什么?

来源:互联网 发布:502 bad gateway nginx 编辑:程序博客网 时间:2024/06/11 13:48

OpenGL 时代的 Texture 是一种名词

从应用开发者来看,texture 是一个名词,在物理上指的是 GPU 显存中一段连续的空间。

这张图是一款 N 卡,最中间的是核心部分 GPU - GP104,texture 的物理位置就在 GPU 周围的 1-2-3-4-5-6-7-8 个显存颗粒里,这个 GPU 配着 8G 显存。

作为名词,texture 有着一些属性,比如宽度、高度、色彩通道数量,这部分属性和图片的属性相同的。

作为名词,texture 还有一些特殊的属性,比如 mipmap。当我们创建一张 texture 的时候,我们创建的通常是一组大小不一致的 texture。

这感觉就好像星巴克。

通常意义上 texture 是一个对 GPU 只读的资源,想写 texture 需要在它之上创建一个 fbo,这在逻辑上其实说不通。

D3D10+ 时代的 Texture 是另一种名词

D3D10 中引入了 view 的概念,和 texture 相关的 view 有

  • 只读的 view,SRV
  • 可写的 view,RTV

这个创新点就很赞了,texture 本身变成了一个读写权限无关的资源,你既可以去读它,也可以去写它。

texture 依然是名词,SRV 和 RTV 是副词。View 这个名字取得很好——观点。创建了资源之后需要告诉 GPU 怎么去访问这个资源。

名词和副词,细细体会。

这里提出第一个令人困惑的观点,D3D10 的 SRV 其实是 opengl 里的 texture。既然 SRV 是副词,那么 texture 也应该是副词?

Vulkan 里的 Texture 是什么?

Vulkan 的函数里并没有 Texture 这个词,取而代之的是 Image 和 ImageView。
Vulkan 的编程模型里所有资源分为两种,Buffer 和 Image。

Image 是 D3D10 中的 Texture,但是逻辑上更贴近 GPU 的实现,以后有空再说。光有 Image 是不行的,和 D3D10 一样,需要 View,不过这里没有区分 SRV 和 RTV。针对 Image 的所有的 View,都叫做 ImageView。

Vulkan 里的编程模型里,已经没有 Texture 这个名词。OpenGL 时代的 Texture 和 FBO,现在变成了 Image 和 ImageView。

在 GPU 内部 Texture 既是名词也是动词

这张图是 N 卡内部运行 shader 的核心单元——streaming multiprocessor (SM),每个 SM 内部有固定的子单元,就叫做 Tex。

怕你们不信,再看下 A 卡内部执行 shader 的单元 —— compute unit (CU),它也有固定单元执行类似指令。

所以对 GPU 而言 Texture 是名词,是实实在在的硬件单元。

但是我要提出第二个令人困惑的观点,Texture 还是动词,当 SM / CU 运行的 shader 中需要读写显存中的资源时,读操作也叫做 TEX。

Texture 到底是什么?

它是名词、副词,也是动词,正确答案取决于上下文,以及是谁在问你。

转载请保留作者名、注明源自微信公众号“黑客与画家”(HackerAndPainter),关注 AI Computing / Visual Computing。


原创粉丝点击